привет всем, у меня есть такая проблема.
модуль quick tabs создает блоки с неким контентом, этот контент надо "втиснуть" между CCK полей.
на ум приходит только - создать CCK поле с типом "блок".
есть ли подобное для CCK, или может как то по другому можно решить?
спасибо.
Комментарии
нашел вот такое решение:
Иногда заранее неизвестно, как будут располагаться блоки. Особенно интересна ситуация, когда надо вставить блок между полями CCK.
Конечно, можно решить это дело шаблонами, но во-первых это громоздко и не изящно, а во-вторых придётся менять код только ради того, чтобы поменять что-либо местами.
На мой взгляд, проблема достаточно красиво решается созданием своего CCK-поля. Для этого потребуется всего два хука: hook_content_extra_fields и hook_nodeapi.....
http://rmcreative.ru/blog/post/drupal-6-dobavljaem-blok-v-vide-polja-cck
только пока ничего не понял (изучаю), есть ли более простое решение?
эх, короче, плачу 5wmz, тому кто подскажет адекватное решение проблемы.
contemplate полный контроль вывода cck материала, правда это не всегда удобно, и желательно хоть немного знать php и друпал api
ща посмотрю этот модуль
модуль полезный, но я не нашел как с его помощью решить мою проблему:
вставка блока между CCK полей.
тема остается открытой.
[ru-api=hook_form_alter]hook_form_alter[/ru-api]
<?php
function mymodule_form_alter(&$form, $form_state, $form_id) {
// раскомментируйте, чтобы узнать $form_id
// drupal_set_message('
'. print_r($form, 1) .'
');
switch ($form_id) {
case 'myform_node_form':
$form['name_field_here']['#suffix'] = 'you code here';
$form['name_field2_here']['#prefix'] = 'you code2 here';
break;
}
}
?>
beerman
скажите, куда это нужно вставить..?
модуль
какой модуль?
создаем в теме регион к примеру "myregion"а именно в файле info темы
создаем CCK поле типа text с форматированным вводом
на ноде на которой хотим видеть блок пишем:
<?php $myregion; ?>
Идем в блоки и ставим нужному блоку выводится в нашем регионе.
По идее должно помочь.
glu2006
попробую, чуть позже отпишу
glu2006
идея понятна, но че-то не работает.. нифига не выводит.
формат ввода - включил "PHP code"
зато отлично работает код:
<?
echo "11111111111111111111111111111111111";
?>
выводит единицы, а блок не хочет..
<?
print $myregion;
?>
<?
print $navbar;
?>
и т.п.
подобный код ничего не выводит
нашел решение!!! ))))
помогла тема http://drupalproject.ru/node/20238 (Вставка блоков в страницы Drupal)
короче получается такое решение моей задачи:
1)
создаем в теме регион - к примеру "myregion", а именно в файле info нашей темы(с) glu20062) создаем CCK поле типа text с форматированным вводом (с) glu2006
3) включаем модуль PHP filter, если не включен
4) начинаем редактировать страницу, для CCK поля устанавливаем формат ввода PHP Code и вставляем следующий код:
<?php
$block = module_invoke('quicktabs', 'block', 'view', 2);
print $block['content'];
?>
где quicktabs - тип блока, созданный модулем quicktabs. для обычного блока пишем block, для вьюсов - наверное views и т.д.
цифра 2 - id блока
эти параметры видны, если навести курсор на ссылку "настроить" для нужного блока, в разделе Блоки (admin/build/block)
5) сохраняем страницу, блок выведется там, где у нас стоит CCK поле.
glu2006
можешь оставить свой кошелек. готов оплатить - за наводку )))
Z157819683526
просто возможно не до конца продумал реализацию
перевел 5 wmz
код протекции - 123456
1) создаем в теме регион - к примеру "myregion", а именно в файле info нашей темы (с) glu2006
я думаю, этот пункт лишний, и без него все работает. зачеркнул
Спасибо. приятно общаться и работать. Поверьте не в плане вознаграждения, а в четкости поставленных задач.
не храните код в базе. решение, мягко говоря, через "ж"
на мой взгляд, это более правильное решение. и регионов никаких не надо
<?php
function mymodule_form_alter(&$form, $form_state, $form_id) {
// drupal_set_message('
'. print_r($form, 1) .'
');
switch ($form_id) {
case 'myform_node_form':
$block = module_invoke('quicktabs', 'block', 'view', 2);
// Указываем поле, после которого должен быть ставлен блок
$form['name_field_here']['#suffix'] = '
';
break;
}
}
?>
Это применится ко всем нодам данного типа, а если надо выборочно? ID хардкодить?
да ну?
в идеале, конечно, было бы написать такой модуль. который бы представлял собой CCK поле (fieldtype = block), внутри которого есть выпадающий список всех блоков.
создал поле, выбрал блок и готово. проектирование дизайна станет намного гибче.
могу выделить под это дело призовой фонд - 20 WMZ, если у кого будет интерес.
даже набросал приблизительное техзадание (как понимаю его я - не программист):
1) создать заготовку для модуля cck_block_feild
2) в режиме редактирования страницы на месте поля отображается выпадающий список, пунктами которого являются все блоки из базы друпала, по порядку.
конечный код html код должен выглядеть приблизительно так (на примере моего сайта):
<option value=block-nice_menus_id-1>Nice Menu 1 (Nice Menu)
<option value=block-block_id-1>Баннер1
<option value=block-primary_links>Primary links
<option value=block-system_id-0>Создано на Drupal
<option value=block-secondary-links>Secondary links
<option value=block-user_id-0>Вход в систему
<option value=block-uc_cart_id-0>Корзина
<option value=block-user_id-2>Новые пользователи
<option value=block-locale_id-0>Переключатель языка
<option value=block-nice_menus_id-2>Nice Menu 2 (Nice Menu)
<option value=block-menu_id-menu-menu-catalog>Каталог автомобилей
<option value=block-quicktabs_id-1>qTab Mazda 3 sedan, описание
<option value=block-quicktabs_id-2>qTab Mazda 3 sedan, параметры
<option value=block-user_id-1>Навигация
<option value=block-comment_id-0>Последние комментарии
<option value=block-node_id-0>Сбор новостей
<option value=block-user_id-3>Сейчас на сайте
<option value=block-search_id-0>Форма поиска
</select>
3) далее, парсится параметр value и разбивается на две части: $тип_блока' и $id_блока. генерится код:
<?php
$block = module_invoke('$тип_блока', 'block', 'view', $id_блока);
print $block['content'];
?>
данный код отображается на месте нашего cck_block_feild
оказывается есть такой модуль - http://drupal.org/project/blockreference
блин, что ж никто не подсказал! )))