Drupal 7 как настроить порядок элементов.

A4
На сайте с 05.01.2012
Offline
55
1032

В общем мне потребовалось создать программно тип материала. Все работает, вот код:


$inf = array(
'type' => 'author_page',
'name' => t('Страница исполнителя песни'),
'base' => 'node_content',
'description' => t('Страница исполнителя песен(или группы).'),
'custom' => true,
'locked' => false,//замок, если включен запрещает администратору сайта, удалять тип материала в ручную, по умолчанию включен
);
//Здесь мы окончательно формируем контент материала, заполнив неуказанные поля дефаултными значениями. (вроде так)
$con = node_type_set_defaults($inf);

//Этой функцией в контент материала добавляются поля по умолчанию, свойственные стандартному типу материала.
//В частности это поле body, в котором как правило размещается текст любой ноды.
node_add_body_field($con);

//Создаем тип материала. Этаже функция позволяет сохранить ранее созданный тип материала.
node_type_save($con);

//Получаем инстанцию материала, специальный объект который позволяет настроить тип-материал.
$ins = field_info_instance('node', 'body', 'author_page');

$ins['display']['rmodule_list'] = array(
'label' => 'visible',
'type' => 'text_summary_or_trimmed',
);

//Применяем внесённые изменения. Иначе все то что мы проделали с инстанцией материала не имеет смысла.
field_update_instance($ins);

field_create_field(
array(
'field_name' => 'author_name', //указываем префикс соответствующий типу материала, чтобы не запутаться, какое поле к кому относится
'cardinality' => 1, //количество элементов, данного типа
'type' => 'text',
'settings' => array('max_length' => 90),
)
);

field_create_field(
array(
'field_name' => 'author_image', //указываем префикс соответствующий типу материала, чтобы не запутаться, какое поле к кому относится
'cardinality' => 1, //количество элементов, данного типа
'type' => 'image',
'settings' => array('preview_image_style' => 'medium'),
)
);

field_create_instance(
array(
'entity_type' => 'node',
'bundle' => 'author_page',
'field_name' => 'author_image',
'label' => t('Изображение исполнителя'),
'widget' => array('type' => 'IMAGE_IMAGE'),
'display' => array(
'rmodule_list' => array(
'label' =>'visible',
'weight' => -20,
'type' => 'hidden',
'preview_image_style' => 'medium'
),
),
)
);

field_create_instance(
array(
'entity_type' => 'node',
'bundle' => 'author_page',
'field_name' => 'author_name',
'label' => t('Имя исполнителя'),
'widget' => array('type' => 'text_textfield'),
'display' => array(
'rmodule_list' => array(
'label' =>'visible',
'weight' => 10,
'type' => 'hidden',
),
),
)
);

//Перестраиваем меню чтобы пункт добавления ноды в "/node/add" был доступен.

menu_rebuild();

В коде мы создаем новый материал с 2 полями - author_name(имя автора песни) и author_image

Все нормально создается, НО! Мне требуется чтобы картинка в материале выводилась перед текстом статьи. Это конечно можно сделать и из самого друпала, но все-же хотелось бы чтобы человек устанавливающий мой модуль на свой сайт меньше мучился, так сказать.... Далее строчка

'preview_image_style' => 'medium' вообще никак не изменяет стиль отображения картинки(я конечно могу стили прописать, но все-же). Если вы знаете как задать оформление для изображения - помогите.

A4
На сайте с 05.01.2012
Offline
55
#1

Ну раз никто не знает - отвечу сам: надо было написать так:

field_create_instance(

array(
'entity_type' => 'node',
'bundle' => 'author_page',
'field_name' => 'author_image',
'label' => t('Изображение исполнителя'),
'required' => TRUE,
'settings' => array(//тут идут настройки поля
'min_resolution' => '920x370'
),
'widget' => array('type' => 'IMAGE_IMAGE','weight' => -10),
'display' => array(
'rmodule_list' => array(
'label' =>'visible',
'type' => 'hidden',
),
),
)
);

Все дело в том, что field_create_instance() передаются установки поля. На мысль об этом меня натолкнула вот эта ссылочка: http://drupal.stackexchange.com/questions/51560/drupal-7-field-api-min-resolution-setting-not-applied

Там правда все на басурманском, но если надо - можно вкурить))

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий