Drupal 6, добавляем блок в виде поля CCK
7 апреля 2009
Иногда заранее неизвестно, как будут располагаться блоки. Особенно интересна ситуация, когда надо вставить блок между полями CCK.
Конечно, можно решить это дело шаблонами, но во-первых это громоздко и не изящно, а во-вторых придётся менять код только ради того, чтобы поменять что-либо местами.
На мой взгляд, проблема достаточно красиво решается созданием своего CCK-поля. Для этого потребуется всего два хука: hook_content_extra_fields и hook_nodeapi:
/** * Implementation of hook_content_extra_fields. * Добавляем новое поле. */ function mymodule_content_extra_fields($node_type) { $extra_fields = array(); if($node_type=='product') { // поле будет только для типа product $extra_fields['my_test_field'] = array( 'label' => 'Тестовое поле', 'description' => t('Описание'), 'weight' => 10, //вес по-умолчанию ); } return $extra_fields; } /** * Implementation of hook_nodeapi(). * Заполняем поле. */ function mymodule_nodeapi(&$node, $op, $teaser, $page) { if($op == 'view' && $node->type=='product') { $node->content['my_test_field'] = array( '#title' => 'Название поля', '#type' => 'item', '#weight' => module_exists('content') ? content_extra_field_weight($node->type, 'my_test_field') : 10, // даём возможность таскать поле в настройках типа '#value' => 'some content', // содержимое поля ); } }
Комментарии RSS по email OK
Кажется пора переходить на шестерку. В пятерке тоже неплохо, но не хватает вот таких приемчиков :-)
Это можно и в пятёрке реализовать. Но на шестёрку действительно пора.
кстати, "Подписаться на комментарии" не работает
Знаю… поломалась штучка :( Освобожусь немного — доделаю и выложу новый код.