volocuga@drupal.org: Блог

Главные вкладки

Принудительно показывать пустые блоки с кастомным текстом в них

2 января 2011 в 14:50

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

Что нибудь попроще Smile

Парни, как автоматом загружать переводы для файлов в /includes

1 января 2011 в 23:40

Всем, в том числе и мне, известно, что при установке Друпал подхватывает переводы для того или иного модуля, если он лежит в папке модуля по адресу translations/код_языка.po, а как быть с переводами для системных файлов .inc в директории /includes?

Неужели только ручками? Сразу скажу, что вариант с объединением перевода для /includes с каким нибудь переводом модуля не подходит по некоторым причинам - всё должно быть отделено

Пробовал ложить перевод в includes/translations/код_языка.po и это не работает

Програмно переписать дефолтную вьюху, вразумите

31 декабря 2010 в 0:57

Парни, как я понял Features не поддерживает дефолтные вьюхи (т.е те, которые прописаны в файлах), вопрос:

Есть модуль который имеет дефолтный вид и использует его. Я не могу просто выключить его вьюху и создать свою - он использует только свою и это в коде

Его вьюху можно переписать вручную, а как это сделать програмно? Задача переписать вид модуля через инсталляционный профиль.

[Решено] Cannot redeclare function (previously declared on line 123) on line 123

24 декабря 2010 в 18:38

Вопрос скорее по PHP сломал мозг, не могу понять, в чём дело

<?php

Fatal error

Програмная запись строки в settings.php

22 декабря 2010 в 18:24

При установке модуля domain access как известно требуется добавить в settings.php строчку со ссылкой на его конфиг

У меня этот модуль ставится из установочного профиля. Так как я не могу записать нужную строку в settings.php перед установкой системы (установка не пойдёт вообще), то я решил записывать нужную строку на конечном этапе установки

Соорудил код:

<?php

function write_domain_conf () {
$modules module_list(FALSETRUEFALSENULL);
if (
in_array('domain'$modules)) {
global 
$base_path;
$filename $base_path conf_path() . '/settings.php';
$path $base_path 'sites/all/modules/domain/settings.inc';
$conf "include '$path';";
chmod($filename0777);
if (
is_writable($filename)) {
    
fopen($filename'a+');
    
fwrite($filename$conf);
    
fclose($filename);
  }
 
chmod($filename0444);
 }
}

?>

Это не работает, думаю дело в правах. Директории, в которых находится settings.php имеют права 777, сам settings.php тоже как бы должен иметь 777 (тот же владелец ведь?)

В чём может быть проблема?

Парни, как подменить тему в профиле установки

22 декабря 2010 в 15:43

Профиль установки, с самого начала, заменить системный Гарланд на свою, которая используется только при установке

Без хака ядра, кто нибудь делал?

К вопросу о пользователе №2

20 декабря 2010 в 23:14

Никогда не обращал на это внимание, но сегодня, в процессе написания профиля установки, столкнулся с тем, что юзер №2 никак не хочет создаваться. Первым идёт админ, второго нет. Пробовал обновлять запросом - ноль эффекта, всё так же юзер №3 самый первый за админом. Встречал скудные упоминания об этом баге на орге, вроде связано с БД.

Кто нибудь из знатоков MySQL просветите, почему есть юзер 1, но нет №2?

Загрузить одним махом все переводы из одного файла при установке. Как?

12 декабря 2010 в 18:52

Коллеги, подскажите максимально простой способ загрузки перевода сборки из одного большого .po из профиля установки

Я смотрел установочный профиль Open Atrium, там используется l10n_update, который тянет перевод с ихнего сервера. Это нехило так усложняет задачу, завести свой сервер локализации у меня в планах явно не на первом месте.

Более лёгкий способ?

Спасибо.

Софт для создания патча MySql дампа.

10 декабря 2010 в 1:49

Ситуация: есть некоторая абстрактная сборка Друпал

Сборка настроена от а до я, что подразумевает использование дампа БД. В процессе тестинга вносятся правки как в код, так и в БД.

С патчем файлов всё ясно, чего не скажешь про БД.

Посоветуйте софт для Mysql который:
1) Желательно фриварный
2) позволяет сравнивать два варианта .sql дампа и создавать патч в виде готового к выполнению .sql запроса, который можно выполнить, скажем в PhpMyAdmin

Кто-то практически таким занимался?

Как взять все права юзара №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". Будь проклят тот день, когда Друпал отдали на откуп чёртовым импруверам