Только что закоммитил свой первый патч для модулей Друпала :)
Под горячую руку попал недавно освоенный 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
Вот и готова полезная фича.