<rmcreative>

RSS

Drupal 6, добавляем блок в виде поля CCK

7 апреля 2009

Иногда заранее неизвестно, как будут располагаться блоки. Особенно интересна ситуация, когда надо вставить блок между полями CCK.

Конечно, можно решить это дело шаблонами, но во-первых это громоздко и не изящно, а во-вторых придётся менять код только ради того, чтобы поменять что-либо местами.

На мой взгляд, проблема достаточно красиво решается созданием своего CCK-поля. Для этого потребуется всего два хука: hook_content_extra_fields и hook_nodeapi:

<?php
/**
 * 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

  1. №1735
    Karsonito
    Karsonito 23.07.2009, 19:52:20

    Кажется пора переходить на шестерку. В пятерке тоже неплохо, но не хватает вот таких приемчиков :-)

  2. №1736
    Sam
    Sam 24.07.2009, 2:24:06

    Это можно и в пятёрке реализовать. Но на шестёрку действительно пора.

  3. №1741
    Karsonito
    Karsonito 24.07.2009, 19:28:05

    кстати, "Подписаться на комментарии" не работает

  4. №1742
    Sam
    Sam 24.07.2009, 20:18:26

    Знаю… поломалась штучка :( Освобожусь немного — доделаю и выложу новый код.

  1. Почта опубликована не будет.

  2. Можно использовать синтаксис Markdown или HTML.

  3. Введите ответ в поле. Щёлкните, чтобы получить другую задачу.