Блог пользователя - volocuga@drupal.org

Как взять все права юзара №1?

9 декабря 2010 в 18:40

Задача организовать демосайт. Юзеры смогут входить с ролью demo и творить всё, что вздумается ПОЧТИ как админ

Поскольку сайт не статичный, предполагается добавление/изменение модулей, соответственно галочки на странице управления правами тоже будут изменяться. Следить постоянно за галочками не хочется

Хочу сделать модуль, который бы брал права админа (другими словами, забирал бы все доступные права всех модулей), отсеивал те, что связаны с безопасностью и автоматически апдейтил роль demo

node_load внутри theme_links валит весь сайт. Почему

26 ноября 2010 в 19:03

Есть нода 'page', которая имеет опционное поле изображения 'banner'. Также эта нода может быть добавлена в очередь (модуль nodequeue). Этот модуль добавляет в $links ноды свои ссылки для добавления текущей ноды в ту или иную очередь. Я хочу скрывать некоторые ссылки для добавления ноды в определённые очереди, если поле 'banner' не содержит картинки - дабы не смущать редактора сайта ненужными линками.

В template.php пишу

<?php

function frontend_links($links$attributes = array()) {
   if (
arg(0) == 'node' && is_numeric(arg(1))) {    
   if (
user_access('manipulate queues')) {    
   
$node node_load(arg(1));    
   
$banner $node->field_banner['content'];  
   foreach (
$links as $key=>$value) {
   
$link_item explode(' '$key);
   if (
$link_item[1] == 'nodequeue-toggle-q-1' && !$banner) {
   unset(
$links[$key]);
   }
  }
 }
}
return 
theme_links($links$attributes = array('class' => 'links'));
}

?>

Это должно работать, но вот вызов node_load() приводит к тому, что сайт вообще не открывается - просто 404 ошибка. Где грабли?

Кстати, подскажите есть ли другой способ отловить массив $links. Хотел через препроцесс, но там уже поздно - линки идут уже готовой строкой

Как переопределить налету параметр destination в зависимости от действия формы (редактирование или удаление)

18 ноября 2010 в 17:02

Я на таб администратора "Редактировать ноду" (табы, что на странице полного просмотра ноды) навесил drupal_get_destination(), так чтобы возвращаться на отредактированную страницу

Всё чудно, но вот если я вдруг захочу удалить ноду, то возвращаюсь, понятно, на удалённую страницу, что неприятно.

Вот что я предпринял

<?php

Фикс высоты родительского div если он содержит вложенные элементы с float

18 ноября 2010 в 3:26

Проблема думаю знакома многим: если вложенные дивы имеют определённое свойство float, родительский див "теряет" высоту, что приводит к тому, что дивы снизу наезжают на этот див

Задавать жёстко высоту не всегда приемлемо.

Фикс, о котором знают наверняка опытные верстальщики, но стал откровением для меня

Вывод виджета Community Tags в node.tpl.php

16 ноября 2010 в 20:53

Господа, кто выводил виджет ввода тегов в node.tpl.php от модуля Community Tags ?

Никак не могу осилить, печатаю такое

<?php

[Решено] Нельзя изменить элемент формы через form_alter, с чем может быть связано?

13 ноября 2010 в 16:46

Форма логина, хочу заменить кнопку входа через Твиттер на свою+дополнительно обернуть в стили

<?php

А как удалить через препроцесс определённый js от определённого модуля?

12 ноября 2010 в 23:08

Задача удалить из сорца определённый js от определённого гуманным способом, например через препроцесс

Озадачен: массив с css нашёл, а по скриптам непонятно что-то. $vars['scripts'] выдаёт всё скопом, суть string, это не подходит

Идеи?

Не хотят сортироваться items в fieldset

8 ноября 2010 в 23:44

Айтемы в сворачивающемся поле. Всё выводится через drupal_render(), (препроцесс формы редактирования

Переопределяю вес пунктов, ключ #weight => разный вес,от 1 до 10, #sorted => TRUE

Упорно не хочет сортироваться. Что делаю не так?

Модуль. Автоматическое заполнение картинок в категориях Ubercart

2 ноября 2010 в 2:15

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

Но сегодня я словил себя на мысли, что при определённом количестве категорий вручную грузить по картинке для человека интеллектуального труда довольно утомительно. Что если для картинки категории использовать какую-то картинку товара, который находится в этой категории? Релевантность будет соблюдена.

Я написал простой модулёк под кодовым названием uc_cat_auto_pic который занимается тем, что добавляет чекбокс и селект выбора доступных пресетов на страницу настроек каталога (admin/store/settings/catalog/edit).

Если чекбокс отмечен, ссылки категорий, для которых не загружена картинка, заимеет картинку из вложенных в эту категорию нод (поле field_image_cache или что там у вас). Также теперь мы можем быстро изменять пресет картинок категорий, который по дефолту намертво зашит в код uc_category

Установка модуля подразумевает некое таинство. Чтобы переопределить функцию theme_uc_catalog_browse() я не нашёл ничего лучшего, как вставить в template.php такое:

<?php

function phptemplate_uc_catalog_browse($tid 0) {  
    
$catalog uc_catalog_get_page($tid);    
    if (
variable_get('uc_cat_auto_pic'FALSE) && module_exists('uc_cat_auto_pic') && !empty($catalog->children)) {
    return 
uc_cat_auto_pic_catalog_browse($tid); // Catalog Auto pictures handler
    
}     ?>

Каверзный вопрос по множетсвенной выборке в Mysql

1 ноября 2010 в 20:31

Разбираюсь со сложными(для меня) SQL запросами.

Практический пример:

есть термин таксономии, скажем 10, имея который, нужно взять пути к файлам поля Imagecache в нодах, которые имеют тип 'product' и помечены этим термином (т.е id 10). Пути к файлам нужны не все, а один, скажем первый встреченный.

Я довольно быстро настрочил такое:

<?php

$childterm 

10// Термин;
$result db_fetch_array(db_query("SELECT node.vid FROM node 
                  JOIN term_node ON  node.vid=term_node.vid 
                  WHERE term_node.tid=
$childterm 
                  AND node.type= 'product' 
                  LIMIT 0, 1"
));
$nvid $result['vid']; 
$result db_fetch_array(db_query("SELECT field_image_cache_fid 
                  FROM 
$image_table 
                  WHERE vid = '%d'"
$nvid));
$fid $result['field_image_cache_fid'];
$result db_fetch_array(db_query("SELECT filepath FROM files 
                  WHERE files.fid = '%d'"
$fid));
$filepath $result['filepath'];

?>

Невооружённый взглядом видно, что тут аж 3 запроса+гора быдлокода, но это работает

Мне на Stackowerflow подсказали такой код:

<?php

$childterm 

10// Термин;
$sql "SELECT f.filepath FROM {node} AS n
INNER JOIN {term_node} AS t ON t.nid = n.nid
INNER JOIN {content_field_image_cache} as c ON c.nid = n.nid
INNER JOIN {files} AS f on f.fid = c.fid
WHERE n.type = '%s'
AND t.tid = '%d'"
;

$result db_query($sql'product'$childterm);

?>

Sql запрос не работает, нужен совет

31 октября 2010 в 21:18

Туплю уже пару часов, не могу понять почему не работает

Задача взять ноды с типом product и термином под номером 12.

Соорудил такое и ничего,абсолютно

<?php

$sql 

Форма управления блоками не дружит с destination. К чему бы это?

27 октября 2010 в 19:56

Ссылка на главной, в блоке (задаётся через препроцесс) такого вида:

<?php        

$link 

l('<span>' t('enable/disable block') . '</span>''admin/build/block' ,
          array(
              
'attributes' => array(
                
'title' => t('enable/disable or change region for this block'),
                
'class' => 'block-config',
              ),
              
'query' => drupal_get_destination(),
              
'html' => TRUE,
            )
          );

?>

Идея всего - возвращать юзера на главную после сабмита формы. Всё работает, если, скажем редактируется содержимое блока, т.е ссылка вида

admin/build/block/configure/МОДУЛЬ/ДЕЛЬТА

но вот с формой управления блоками назад возвращать никак не хочет. В чём трабла?

Срочно в номер: на Друпал.орг сменили шрифт

23 октября 2010 в 0:54

Эпопея с прихорашиванием д.орг продолжается. Сменился шрифт, во всяком случае у меня. теперь "DejaVu Sans". Будь проклят тот день, когда Друпал отдали на откуп чёртовым импруверам

Кто то имел дело с модулем project?

14 октября 2010 в 13:47

Проблема - не собирается файл для загрузки, предполагаю, что проблема в неправильной настройке файла package-release-nodes.php, в частности с параметром $cvs_root

Кто то может растолковать, как его правильно указать.

Непонятное кэширование drupal_set_message

9 октября 2010 в 14:33

Выставляю drupal_set_message на определённой странице в template.php, так оно показывается и при переходе на другую страницу и исчезает, если повторно перегрузить эту другую страницу

код

Добавляем свои иконки на панель управления Ubercart

29 сентября 2010 в 1:41

Недавно задался целью добавить свои иконки (по дефолту там только основные и уродские по виду) на так называемый dashboard, т.е страницу с адресом admin/store, а заодно и заменить таблицу на дивы

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

В template.php добавляем:

<?php

function НАЗВАНИЕВАШЕЙТЕМЫ_uc_admin_dashboard($type$menus) {  
  
$output '<div class="uc-store-admin-table">';
  
$panel 0;
  if (
is_array($menus)) {
    foreach (
$menus as $menu) {
      
$panel++;
      
$panel_title $menu['title'];
      
$href $menu['href'];      
      list(
$img_name, ) = explode('/'$href0);
      
$img_name administrator_id_safe($img_name);
      
$img_path path_to_theme() . '/images/admin-dashboard/' $img_name '.png';
      if (
file_exists($img_path)) {
      
$dash_img theme_image($img_path$panel_title$panel_title$attributes = array ('class' => 'admin-dashboard'), FALSE);
      } else {
      
$dash_img '';
      }  
      
$panel_links theme('admin_block_content'system_admin_menu_block(menu_get_item($menu['href'])));
      
$panel_table '<div class="panel-title">'l($menu['title'], $menu['href']) .'</div>';
      
$panel_table .= $dash_img;
      if (
strlen($panel_links) > 0) {
      
$panel_table .= '<div class="panel-links" style="'$disp .'">'$panel_links .'</div>';
      }
?>