Студия разработки сайтов и приложений

Netspark.ru

Заметки и разработки

Drupal

TAC Lite — Hide Access Terms Patch

Только что закоммитил свой первый патч для модулей Друпала :)

Под горячую руку попал недавно освоенный 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

Вот и готова полезная фича.

Комментарии