25 авг. 2011 г.

Программное добавление термина таксономии

Этот код работает для DRUPAL 7
поддерживается создание связей терминов и полей таксономии
PS:
Обязательно проверьте чтоб ваш скрипт был в кодировке utf


/**
 * Arguments
 * name
 * vid
 * arg[parent] =0
 * arg[termFields] = array(array(key=>value))
*/
function _taxonomy_term_add($name, $vid, $arg = array()){
   
    $term = new stdClass;
    $term->name = $name;
    $term->vid = (int)$vid;
    $term->parent = (int)$arg['parent']>0? (int)$arg['parent'] : 0;
    $term->path = array(
     "alias" => '',
     "pid" => null,
     "source" => null,
     "language" => "und",
     "pathauto" => 1
     );
  
   
    if(isset($arg['termFields']) && is_array($arg['termFields'])){
      $termFields = $arg['termFields'];
     
      foreach($termFields as $field){
        list($fieldName,$fieldValue) = each($field);
     
        $term->{$fieldName} = array(
                            "und" => array(
                                     array("value" => $fieldValue)
                                          )
                                 );
       }
    }
   
    taxonomy_term_save($term);
    _taxonomy_manager_update_voc($term->vid, $term->parent);
    taxonomy_terms_static_reset();
 
  return $term;
    
}

/**
 * Helper function that updates the hierarchy settings of a voc
 */
function _taxonomy_manager_update_voc($vid, $parents = array()) {
  $voc = taxonomy_vocabulary_load($vid);
  if ($voc->vid == $vid) {
    $current_hierarchy = count($parents);
    if ($current_hierarchy > 2) {
       $current_hierarchy = 2;
    }
    if ($current_hierarchy > $voc->hierarchy) {
      $voc->hierarchy = $current_hierarchy;
      taxonomy_vocabulary_save($voc);
    }
  }
}

//пример добавления термина

$termname = 'Кама';
$vid = 4;
$arg = array(
             'parent' =>0
             'termFields' => array(array('taxonomy_field_name'=>$termname))
            );

_taxonomy_term_add($termname, $vid, $arg);

19 авг. 2011 г.

Как программно вывести exposed форму

Так можно вывести exposed форму даже если в views-е эта форма не вынесена в блок 

<?php 

function get_view_exposed_form($view_name 'some_view'$display_id 'some_display') {
  if (
$view views_get_view($view_name)) {
      if (
$view->access($display_id)) {
          
$view->set_display($display_id);
          if (isset(
$view->display_handler)) {
              
$view->init_handlers();
              if (
$view->display_handler->uses_exposed()) {
                  
$exposed_form $view->display_handler->get_plugin('exposed_form');
                  
$rendered_form $exposed_form->render_exposed_form();
                  
$view->destroy();
                  return 
$rendered_form;
              }
           
          }
       
      }
      
$view->destroy();
  }

  
drupal_set_message('Something gone wrong''error');
  return 
'';
}
}
?>


PS:
Еще раз спасибо за решение deb
http://www.drupal.ru/node/67236

Views preprocess функции


  1. hook_preprocess_views_view — вызывается перед темизацией всего представления.
  2. hook_preprocess_views_view_fields — вызывается перед темизацией строки с полями.
  3. hook_preprocess_views_view_field — вызывается перед темизацией поля в строке.
  4. hook_preprocess_views_view_unformatted — вызывается перед темизацией списка Unformatted list.
  5. hook_preprocess_views_view_list — вызывается перед темизацией списка HTML list.
  6. hook_preprocess_views_view_grid — вызывается перед темизацией Grid-а.
  7. hook_preprocess_views_view_table — вызывается перед темизацией таблицы.
  8. hook_preprocess_views_view_summary — вызывается перед темизацией упорядоченного summary списка.
  9. hook_preprocess_views_view_summary_unformatted — вызывается перед темизацией неупорядоченного summary списка.
  10. hook_preprocess_views_view_rss — вызывается перед темизацией rss ленты.
  11. hook_preprocess_views_view_row_rss — вызывается перед темизацией строки в rss ленте.
  12. hook_preprocess_views_exposed_form — вызывается перед темизацией формы с раскрытыми фильтрами.

1) Примеры использования views_pre_view

    function examplemodule_views_pre_view(&$view, &$display_id, &$args){

if($view->name == 'mytestview){

//назначаем новый фильтр по ТИПУ МАТЕРИАЛА
$filterType = array(
"id" => "type",
"table" => "node",
"field" => "type",
"relationship" => "none",
"group_type"=> "group",
"ui_name"=> "",
"operator"=> "in",
"value"=> array($filterValue => $filterValue)
);


$view->display['default']->handler->options['filters']['type'] = $filterType ;

//меняем тип вывода на grid
$view->display['default']->handler->options['style_plugin'] = 'grid';

//меняем направление сортировки
$view->display['default']->handler->options['sorts']['title']['order'] = 'DESC';

     }

}

2 авг. 2011 г.

Изменение Exposed filters

Изменение фильтра в exposed форме типа textfield на select
1) С помощью хука hook_form_alter

function mymodule_form_alter(&$form, &$form_state, $form_id) {
    
   if($form_id=='views_exposed_form') {
  
   $tmp = $form['field_foofieldname_value'];
   $tmp['#type']='select';
   $tmp['#options'] = array(''=>t('Any'),"12"=>12,"13"=>13,"14"=>14);
   $tmp['#default_value']='';
   $tmp['#size']='null';
  
   $form['field_foofieldname_value']=$tmp;
   }

1) С помощью хука hook_form_views_exposed_form_alter


function mymodule_form_views_exposed_form_alter(&$form, $form_state) {
 //ловим форму по id
 if ($form['#id'] == 'views-exposed-form-myviewsname-page-1'){
    
   $tmp = $form['field_foofieldname_value'];   $tmp['#type']='select';
   $tmp['#options'] = array(''=>t('Any'),"12"=>12,"13"=>13,"14"=>14);
   $tmp['#default_value']='';
   $tmp['#size']='null';
  
   $form['field_foofieldname_value']=$tmp;
}
 }

Вывод всех переменных в шаблоне

<?php
print print_r(array_keys(get_defined_vars()), 1);
 
// If you have devel.module installed, comment the line above and uncomment the line below
  // dsm(array_keys(get_defined_vars()));
?>