Добрый день.
У меня в материале есть CCK группы и ССК поля.
- Вывод.
Я программно вставляю новое поле.Как сделать так, чтобы оно попало в существующую CCK группу?
- Ввод. Создание материала.
Как мне вставить любую форму, например, поле определения термина таксономии внутрь группы?
Комментарии
Можно сделать модуль с хуком nodeapi и добавлять к выводу ноды нужный html-код в нужное место (в т.ч. внутрь fieldset-а, т.е. группы). Это один if и одно присвоение. Примерно так:
<?php
function mymodule_nodeapi($op, $node...) {
if ($op == 'view' && $node->type == 'mytype') {
$node->content['mygroup']['username'] =
array('#type' => 'markup', '#value' => theme('username'....), '#weight' => 5);
}
}
?>
Только надо, чтобы модуль имел больший вес, чем cck (достаточно, чтобы имя модуля было > content, иначе надо фиксить табличку system).
Не совсем понял то, что вы написали. Поэтому ничего в вашем примере не менял, кроме имен.
Создал модуль insert_into_group и включил.
function insert_into_group_nodeapi($op, $node) {
if ($op == 'view' && $node->type == 'ru') {
$node->content['group_characteristics'] =
array('#type' => 'markup', '#value' => theme('username'), '#weight' => 5);
}
}
?>
Ничего не поменялось...
Пробовал добавить
$node->content['group_characteristics']['group'] =
array('#type' => 'markup', '#value' => theme('username', $node), '#weight' => 5);
?>
в node-ru.tpl.php. Ничего
Ну я совсем черновик написал. Там и параметры неправильно написаны, надо (&$node, $op, $a3 = NULL, $a4 = NULL). И theme('username') очевидно неправильно написано, здесь имелся ввиду кусок вашего кода theme('username', $node). И про другое я не уверен)
И куда пропал ['username'] после ['mygroup']??
В node-ru.tpl.php этот код по-любому нет смысла добавлять.
Попробовал все упростить, чтобы вывелось хоть что-нибудь:
function insert_into_group_nodeapi($op, $node) {
if ($node->type == 'ru') {
$node->content['group_characteristics'] = array(
'#type' => 'textfield',
'#title' => t('Name'),
);
}
}
?>
Ничего. А почему в node-ru.tpl.php не добавить? Простой
<?php print theme('username', $node) ?>
<?php print '</div>' ?>
там работает. Только без группы...
Говорю же, что аргументы к функции nodeapi неверные как минимум. Во вторых проверку операции зря убрали ($op == 'view').
Если делать через node-ru.tpl.php, то конкретно хук nodeapi там никак не катит. Сделать можно и через node-ru.tpl.php, но придется все поля ручками выводить и между ними вставлять theme('username'....).
В справочнике API примеров нет. Как чем пользоваться догадаться сложно.
Отредактировал так:
function mymodule_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
if ($op == 'view' && $node->type == 'ru') {
$node->content['mygroup'] =
array('#type' => 'markup', '#value' => theme('username', $node), '#weight' => 1);
}
}
?>
Вроде бы, действительно $op == 'view', насколько понял из описания [ru-api=hook_nodeapi]hook_nodeapi[/ru-api]. Пока глухо
Этот код практический рабочий, вместо mymodule надо писать реальное название модуля (как называется файл *.module). У меня по крайней мере он работает (вместо ru пишу story для тестирования).
Только выводить будет на в fieldset, а куда попало, потому что вместо $node->content['mygroup']['username'] написано $node->content['mygroup']. Вместо mygroup надо будет написать название cck-группы.
так и делаю...