Показаны сообщения с ярлыком drupal. Показать все сообщения
Показаны сообщения с ярлыком drupal. Показать все сообщения

29 окт. 2012 г.

Переопределение шаблона views в хуке views_view_fields

Hello! Today I'll tell you how to place views template files in your custom module's directory. It's easy to override views template within theme, but to achieve our goal we need write some code. We will override template for Views Row style output. Please, search views-view-fields.tpl.php file in views module directory.
Imagine, we have a view with name articles and page display. Let's go!
We need adjust module's weight through hook_install(). Place next code to your_module.install file.


Now place next code to your_module.module file.
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
/**
 * Implementation of hook_theme().
 */
function your_module_theme($existing) {
  $path = drupal_get_path('module', 'your_module');
  return array(
    'views_view_fields__articles__page_1' => array (
      'arguments' => array('view' => NULL, 'options' => NULL, 'row' => NULL),
      'template' => 'views-view-fields--articles--page-1',
      'original hook' => 'views_view_fields',
      'path' => $path,
    ),
  );
}
Note, you have to replace string in the brackets in this code with your data.
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
/**
 * Implementation of hook_theme().
 */
function your_module_theme($existing) {
  $path = drupal_get_path('module', 'your_module');
  return array(
    'views_view_fields__[view name]__[display id]' => array (
      'arguments' => array('view' => NULL, 'options' => NULL, 'row' => NULL),
      'template' => 'views-view-fields--[view name]--[display id]',
      'original hook' => 'views_view_fields',
      'path' => $path,
    ),
  );
}
Now views will find views-view-fields--articles--page-1.tpl.php file in your module's directory.
That's all!

31 авг. 2012 г.

Views group by по одному полю

В вьюсе для drupal 6 есть такой замечательный косяк, если добавляешь в хендлере

$this->query->add_groupby("node.nid");

то в group by добавляются все поля


чтобы все таки сделать группировку по нужным полям добавленным вручную
нужно сначала всем полям запретить добавляться в группировку:

//delete from group by all fields
       foreach($this->query->fields as $fieldname => $param){
         $this->query->fields[$fieldname]['aggregate'] = 1;  
       }
      
       $this->query->add_groupby("node.nid");


ps:
всавлял этот код в своем хендлере вроле работало,
еще можно вставить в hook_views_query_alter

11 апр. 2012 г.

Drupal - Отключить пункт меню для роли

function hook_menu(){
    $items['mypage'] = array(
    'title' => 'My page',
    'page callback' => 'mypage_show',
    'page arguments' => array($user->uid),
    'access callback' => 'mypage_access',
    'access arguments' => array($user->uid),
    'type' => MENU_LOCAL_TASK,
  );
  return $items;
}

function mypage_access($uid) {
  global $user;
  $account = user_load($uid);

  return in_array(14, array_keys($account->roles)); //14 - id of checked group
}

10 апр. 2012 г.

Drupal - Динамичекое имя формы

пример вызова
drupal_get_form('myform_form_1223')


перехват форм по маске

function hook_form_forms($form_id) {
  $forms = array();
  if (strpos($form_id, 'myform_form_') === 0) {
    $forms[$form_id]['callback'] = 'myform_form';
  }
  return $forms;
}

4 янв. 2012 г.

Добавление свего валидатора формы

<?php
function mymodule_form_alter(&$form, &$form_state, $form_id) { if ($form_id == 'views_exposed_form') { $form['#validate'][] = 'mymodule_my_validate'; $form['#submit'][] = 'mymodule_my_submit'; } }

function 
mymodule_my_validate($form, &$form_state) { }

function 
mymodule_my_submit($form, &$form_state) { }

2 янв. 2012 г.

Table view with rows/columns switched | drupal.org

Drupal: Установка Drush на Windows

Drupal: Установка Drush на Windows | xandeadx.ru

Drush — это мощная утилита для управления друпалом из командной строки. С помощью неё можно скачивать, устанавливать, включать и выключать модули, проверять обновления, устанавливать темы, очищать кэш, делать синхронизацию баз и много другое.

XML-RPC в Drupal 7 | InternetDevels, The Ukrainian Drupal Company

29 нояб. 2011 г.

drupal 7 создание массива options функцией drupal_map_assoc

 $form['nice_menus_type_' . $delta] = array(
    '#type' => 'select',
    '#title' => t('Menu Style'),
    '#description' => t('right: menu items are listed on top of each other and expand to the right') . '<br />' . t('left: menu items are listed on top of each other and expand to the left') . '<br />' . t('down: menu items are listed side by side and expand down'),
    '#default_value' => variable_get('nice_menus_type_' . $delta, 'right'),
    '#options' => drupal_map_assoc(array('right', 'left', 'down')),
  );

14 нояб. 2011 г.

Ниже приведён беглый обзор модулей для работы с меню в Drupal.

Надеюсь многим он будет полезен и многие добавят свои описания и замечания к нему.


  • Quick Admin Menus - JS меню администратора
  • Drupal Administration Menu - JS навесок, который показывает в админке пункты меню для админки(быстрая и удобная навигация по админке)
  • Administration Menu Dropdown - добавка к предыдущему, позволяющая скрывать его по Ctrl+Tab
  • DHTML Menu - делает любое вложенное меню разворачивающимся без перезагрузки страницы
  • Quickmenu - примерный аналог, позволяющий сделать преобразовать обычное меню в разворачивающееся
  • Аieldset Menus - с расширеными настройками(сильно не разбирался)
  • Dropdown Menu - выводит через тему JS меню с нескольким уровнями вложенности
  • YUI Menu - использует YUI модуль для создания JS выпадающего многоуровневого меню (с красивой анимации)
  • SimpleMenu - JS меню в виде блока, прикрепляемое к верху.
  • Nice Menus - только CSS для большинства браузеров, и с минимумом JS для IE меню
  • Nice Primary Menus - вместе с предыдущим делает красивое меню для Primary
  • Lucid menu - клон Nice menus с расширенными настройками
  • imagemenu - в админке drupal меню добавляет свои пункты, для создания меню из картинок(одна из них реагирует на hover)
  • jumpmenu - добавляет в блок комбобокс со списком пунктов люого выбраного меню
  • loginmenu - простой модуль, создающий ссылку на /login страницу
  • Menu Block Split - позволяет разбить меню по нескольким блокам и управлять ими
  • Menu Display API - модуль для поддержки других модулей(ставится, только если его требуют другие модули)
  • Menu per Role - делает пункты меню доступными в зависимости от роли
  • Menu Subtree Permissions - позволяет пользователям изменять части меню, не давая разрешения для всего меню.
  • Sitemenu - Модуль предоставляет "site map" стиль для страницы с навигацией по по категориям сайта и другие варианты
  • Menu Trim - Модуль обеспечивает хитрое сворачивание\разворачивание меню для уменьшения количества отображаемых пунктов
  • Submenu Tree - Позволяет организовывать сложные древовидные меню
  • Menu Tree - Простая структура меню Drupal
  • Remove Non-viewable Menu Items - гарантирует, что пользователь не увидет те пункты меню, которые ему не положены по роли
  • Sliced Menu - создает под каждый уровень меню свой блок
  • Menu Trails - Улучшения стандартного меню(в чем суть сильно не понятно)
  • Menu Translation Этот модуль обеспечивает, удобный интерфейс чтобы перевести пункты меню (i18n модуля).
  • MiniMenus - Google-подобную регистрацию на сайте
  • OG Menu - Позволяет делать меню, видимое только членам группы.
  • Tax'o'Menu - навигация по словарям таксономии
  • Taxonomy menu - добавляет в меню ссылки на термины таксономии.
  • Menu Page?
  • Menu Scout?

источник
http://www.drupal.ru/node/11082

12 нояб. 2011 г.

Полезные модули для Drupal 7

Регистрация и профиль пользователя

Profile2
user registrationpassword
Email_registration - Allow users to register using only an email address, ie. without username.
http://drupal.org/project/logintoboggan
http://drupal.org/project/captcha_pack
http://drupal.org/project/terms_of_use
http://drupal.org/project/hidden_captcha
http://drupal.org/project/service_links
http://drupal.org/project/loginza


Интерфейс

http://drupal.org/project/toolbar_hide













10 нояб. 2011 г.

Принцип использования темизации и препроцесс функций


<?php
theme
('uc_abas_V',array('elements' => $vie) );?>


А так же добавив:

<?phpfunction uc_abas_preprocess_uc_abas_V(&$variables) {
    
template_preprocess_node($variables);
}
?>



uc_abas - имя модуля

uc_abas_V - имя темы которую регестрируем

Только вот правильный ли способ, работать то работает, но может есть что погибше и валиднее для таких ситуаций.
Код:


<?php//Регестрируем тему, файл темы node.tpl.php,
//в той же папке что и модуль
function uc_abas_theme() {
    return array(
        
'uc_abas_V'  => array(
            
'template' => 'node',
        ),
    );
}
//Хук вносим изменения в переменные,
//так как это бы сделал template_preprocess_node
function uc_abas_preprocess_uc_abas_V(&$variables) {
    
template_preprocess_node($variables);
}
//Рендерим ноду с указанным ID, делаем этот рендер нашей темой!
//в theme через элемент массива 'elements' => $vie,
//передаем данные чтоб все в uc_abas_preprocess_uc_abas_V
//нормально работало
function uc_abas_amen() {
   
    
$nod=node_load(1);
    
$vie=node_view($nod);
   
    
$res=array(
        array(
'#markup' => theme('uc_abas_V',array('elements' => $vie) )),
    );
   
    return 
$res;   

}
?>

23 сент. 2011 г.

Theme_select

Для вывода select с собственными данными можно использовать функцию
 $sel =  array('element'=>array(
     '#type' => 'select',
     '#ajax_processed'=>'myfunc',
     '#options' =>array(1=>'first', 2=>'second', 3=>'third')
 ));
echo  theme_select($sel);   


  дополнительные параметры

//Array ( [element] => Array ( [#type] => select
//[#default_value] =>
//[#empty_value] => -1
//[#title_display] => invisible
//[#title] => Регион для блока Сейчас на сайте
//[#options] => Array ( [-1] => - Нет - [sidebar_first] => Левая колонка [sidebar_second] => Правая колонка [content] => Содержимое [header] => Заголовок [footer] => Подвал [highlighted] => Закреплено [help] => Справка )
//[#input] => 1
//[#multiple] => [#process] => Array ( [0] => form_process_select [1] => ajax_process_form )
//[#theme] => select
//[#theme_wrappers] => Array ( [0] => form_element )
//[#pre_render] => Array ( [0] => ctools_dependent_pre_render )
//[#defaults_loaded] => 1
//[#tree] => 1
//[#parents] => Array ( [0] => blocks [1] => user_online [2] => region )
//[#array_parents] => Array ( [0] => blocks [1] => user_online [2] => region )
//[#weight] => 0.005 [#processed] => 1
//[#required] =>
//[#attributes] => Array ( [class] => Array ( [0] => block-region-select [1] => block-region--1 ) )
//[#id] => edit-blocks-user-online-region
//[#name] => blocks[user_online][region]
//[#value] =>
//[#empty_option] => - Нет -
//[#ajax_processed] =>
//[#sorted] => 1
//[#children] => ) )



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()));
?>

28 июл. 2011 г.

Обновление Drupal ядра

Для обновления ядра Drupal небходимо
1) удалить все папкпи кроме
  •    sites
  •    themes (если есть изменения в темах)
2) скопировать все файлы кроме этих папок в корневую директорию сайта
3) запустить update в админке

ссылки:
http://www.siteground.com/tutorials/drupal-tutorial/drupal_upgrade.htm

15 июл. 2011 г.

Drupal 7 - обновление модулей через админку

Был наслышан о автоматическом обновлении модулей в  drupal 7, но после попытки самому установить или обновить модуль через админку и получил ошибку "Your server does not support installing modules and themes from this interface. Instead, install modules and themes by uploading them directly to the server, as described in the handbook."

После недолгих исканий нашел решение проблеммы

I looked into my phpinfo() of the web server, and found that there was no FTP support. I recompiled PHP from source with this config option added:
"--enable-ftp"
(the whole line of the PHP config options that I used:

'./configure' '--with-apxs2=/usr/local/apache2/bin/apxs' '--with-config-file-path=/etc' '--with-imap=/var/src/imap-2007e' '--with-gd' '--enable-mbstring' '--with-curl' '--with-mysql' '--with-pcre-regex=/usr/local' '--enable-pdo' '--with-pdo-mysql' '--with-zlib' '--enable-ftp'

) After that, I ran "make; make install" to get the "libphp5.so" for Apache HTTPd updated, and restarted the Apache web server. And that was it, the web interface for module installation worked.
Few things to note though:
1. I stopped the Apache server before PHP's "make install" was executed, to prevent an issue where "libphp5.so" can't be overwritten if it's in use.
2. the Drupal web site's "sites/all/modules" directory needs to be already created and owned by the Apache web server user to prevent errors such as:
Installation failed! See the log below for more information.

    * Error installing / updating
    * File Transfer failed, reason: Cannot chmod /var/www/drupal7/sites/all/modules/views.
3. Module dependency needs to be manually checked and installed.
(e.g. if installing Views , it's better to have Ctools installed first; otherwise, some error message flashed by (couldn't see clearly), even though it showed installation was successful)

25 янв. 2011 г.

Создание и применение патча в Drupal

Эта ссылка на видео, где можно посмотреть как создаются и применяются патчи для в Друпале. После просмотра скринкаста, вы сможете создавать полноценные исправления для Друпала и модулей, постить их на drupal.org, таким образом, полноценно принимая участие в разработке системы. Кроме того, вы теперь будете знать, как использовать патчи взятые на том же drupal.org'е для своих нужд.