CALLIKA: Блог

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

Проблема при темизации результатов поиска

20 июля 2010 в 23:01

Доброго времени суток,

Решил сделать так, что бы в качестве результатов поиска выводились тизеры нод. Нашел мануалы, сделал следующим образом:

1. создал файл в папке с темой search-result.tpl.php
2. в него вставил код:

<?php
    $node = (object)node_load($result['node']->nid);
    print node_view($node, true, false, false);
?>

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

<?php
$node = (object)node_load($result['node']->nid);
$node = node_build_content($node, true, false);
$content = drupal_render($node->content);
$node->teaser = $content;
unset($node->body);
node_invoke_nodeapi($node, 'alter', true, false);
echo theme('node',$node, true, false);
?>

таже фигня.

В итоге выяснил, что функция theme не возвращает результатов.
Сам $node нормально загружается и подготавливается к темизации...

кст, пробовал использовать [my-theme-name]_preprocess_search_result в template.php - результат такой же.

Кто-нибудь сталкивался с подобным? Есть предположения в чем проблема?

Блок с тизерами определенных нод

15 июля 2010 в 0:35

Доброго времени суток,

Сейчас разрабатываю сайт - на нем есть ряд блоков типа: "top rated content" и "new content" (Создаются с помощью views). Блоки красиво оформлены и все такое. Замечательно. Но есть так же задача: иметь возможность создавать блоки и в качестве их содержимого указывать конкретные ноды.

Я было ринулся в бой, но подумав, решил спросить у знающих людей: может кто-то реализовал подобное и подскажет идею.

Самому в голову пришло четыре выхода:

1. Так же через вьюс сделать выборку нод, но выбирать только прилепленные + фильтрация по нужным типам контента.
2. Написать свой модуль, предоставляющий блок, в настройках у которого был бы список нод для показа, поддерживающий функционал multiblock.
3. Сделать тип контента с полем nodereference, создавать экземпляр этого контента, в поле вбивать нужные узлы для показа в блоке, потом views`ом или своим модулем это дело превращать в блок.
4. Лечь спать Smile

Первый вариант мне не нравится из-за недостаточной гибкости: в лучшем случае один блок на один тип контента, нет возможности сортировки ну и подобное.

Второй... Да всем мне он нравится, но опыт показывает, что если тебе что-то нужно для друпала, то 99% оно уже есть... Поиск мне результатов кроме multiblock не дал (не спорю, может плохо/не так искал), поэтому вот решил спросить Smile

Третий - вообще бред от недосыпания: больше гемороя, чем пользы.

Сам пока остановился на четвертом Smile

Буду рад любым подсказкам, спасибо!

Как правильно скрыть CCK поле на форме редактирования ноды?

13 июля 2010 в 11:53

Доброго времени суток,

есть два типа материала: A (Author) и B (Album). У А есть nodereferences на B и обратно (связь 1:* - по использованию, но по факту и там и там стоит "много полей" - требование cnr). Обратные ссылки проставляются с помощью cnr. Т.е. в альбоме я указываю автора, а ссылка из автора на альбом проставляется автоматически.
Что бы лишние поля не мозолили глаза, из формы редактирования автора нужно убрать список альбомов, с которыми он связан.
Я знаю несколько вариантов:
1. CSS
2. JS
3. изменить #type на value
4. изменить #type на hidden
5. поменять #access
6. описан ниже

1,2,4 мне не особо подходят, так как пользователь теоретически может залезть в html код и отправить некорректные данные (назначить артисту альбом, который ему не принадлежит)

5 и 3 у меня не заработали, форма не проходит валидацию.
я извратился следующим образом (6-й вариант): повесил два обработчика на форму:
1. на after build
2. на submit
в первом я сохраняю в $form_state все поле которое хочу скрыть и делаю ему unset.
во втором, я из $form_state выдергиваю сохраненные ранее данные и вставляю обратно в форму. (так же слежу за тем, что бы мой обработчик на сабмит выполнялся перед всеми остальными)

до недавнего времени этот метод нормально работал, теперь почему-то работать перестал (Выдается сообщение при попытке изменить автора, который связан с альбомами: "this post can't be referenced" - ошибка генерируется nodereference модулем). Почему - пока разобраться не получилось Sad (в системе куча модулей стоит)

[РЕШЕНО] При создании ноды не создается preview

11 июля 2010 в 18:40

Доброго времени суток,

проблема в следующем: есть тип материала с imagefield полем, настроенный filefield_paths и imagechache. Картинка при загрузке должна переименовываться в [nid].[original_extension] (например 100.jpg).

При создании ноды файл переименовывается, но если пытаться отобразить его средствами imagecache:

theme_imagecache('normal_size', $field_cover_art[0]['filepath'], $field_cover_art[0]['data']['alt'], $field_cover_art[0]['data']['title'], array('width' => 120, 'height' => 120, 'class'=>'tizer_block_img'));

то в качестве пути к изображению используется оригинальное имя файла и естественно пользователю ничего не отображается.

Если же начать редактировать эту ноду и нажать save, то imagecache начинает все нормально отображать.

Уже не знаю за что хвататься, вроде проверил все что можно.

Кто-нибудь сталкивался с подобным?

Создание связанных нод на одной странице

15 апреля 2010 в 0:17

Доброго времени суток,

Возникла задача создания страницы на которой можно создавать несколько нод одновременно.
Если подробнее то - есть три типа нод:
1. музыкальный альбом (титл, картинка для обложки, описание, набор ссылок на ноды - композиции(node ref), набор ссылок на ноды - авторы (node ref));
2. композиция (название, файл с треком ссылка на альбом (node ref))
3. автор (название, описание, набор ссылок на альбомы (node ref))
обратные ссылки проставляются автоматически с помощью внешнего модуля (если кому интересно, поищу среди кучи установленных модулей название этого).

Собственно необходимо сделать страницу добавления альбома вместе с композициями (сейчас создается альбом, а потом по отдельности композиции). У самого в голове два варианта решения проблемы:
1. написание модуля, который бы создал страничку с нужной формой, а при сабмите обрабатывал правильно пришедшие данные и создавал бы все ноды и зависимости между ними (начал такой писать, сделал форму, только вот не знаю как правильно вставить в нее виджеты загрузки файлов, загрузки картинок и атодополняющего текстбокса для указания автора. Ну и плюс разруливать потом пришедшие файлы ручками тоже не хочется...)
2. найти модуль который объединяет формы добавления в одну (или опять же написать, только тут вообще не знаю как подступиться)

Кто-нибудь решал похожие задачи? Что посоветуете? Может есть еще альтернативы?

Спасибо