Только что закоммитил свой первый патч для модулей Друпала :)
Под горячую руку попал недавно освоенный Taxonomy Access Control Lite. Данный модуль позволяет просто и без затей разграничивать доступ к элементам содержимого в зависимости от того, какие теги этим элементам присвоены. Очень удачно, особенно в дополнение к обычной системе разрешений и ролей.
Так или иначе, я решил, что используемые для управления доступом теги - совсем служебные и поэтому их вовсе необязательно показывать в поле тегов каждого нода. Этой идее собственно и служит новенький патч: прячет теги, задействованные в управлении доступом. Само собой, только если пользователь этого желает.
Делается все просто. Сначала в форму админки добавляется чекбокс (на случай если не всем понравится моя идея):
//checkbox, hide access terms if checked
$form['tac_lite_hide_terms'] = array(
'#type' => 'checkbox',
'#title' => t('Hide Access Terms'),
'#description' => t('Check this box if you want to stop vocabulary terms you use for access control from showing when nodes are viewed.'),
'#default_value' => variable_get('tac_lite_hide_terms', 0),
);
Затем в хуке nodeapi проверяется, нужно ли спрятать теги,
function tac_lite_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
switch ($op) {
case 'view' :
//check if we need to hide terms
$hide_terms = variable_get('tac_lite_hide_terms',0);
if ($hide_terms) {
_tac_lite_hide_access_terms($node);
}
break;
}
}
и вызывается соответствующая функция.
function _tac_lite_hide_access_terms(&$node) {
//get access vocabularies
$vids = variable_get('tac_lite_categories', array());
if (count($vids) == 0) {
return ;
}
//unset terms for access vocabularies
foreach ($vids as $vid) {
$terms = taxonomy_node_get_terms_by_vocabulary($node,$vid);
foreach ($terms as $term) {
unset($node->taxonomy[$term->tid]);
}
}
} //function _tac_lite_hide_access_terms
Вот и готова полезная фича.