Вопрос по темизации

Главные вкладки

Аватар пользователя digital_sword digital_sword 4 декабря 2009 в 18:49

Добрый день.
У меня в материале есть CCK группы и ССК поля.

  1. Вывод.
    Я программно вставляю новое поле.
        <?php print '<div>'?>
        <?php print theme('username', $node) ?>
        <?php print '</div>' ?>

    Как сделать так, чтобы оно попало в существующую CCK группу?

  2. Ввод. Создание материала.
    Как мне вставить любую форму, например, поле определения термина таксономии внутрь группы?

Комментарии

Аватар пользователя edhel edhel 4 декабря 2009 в 19:06

Можно сделать модуль с хуком 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).

Аватар пользователя digital_sword digital_sword 4 декабря 2009 в 19:29

Не совсем понял то, что вы написали. Поэтому ничего в вашем примере не менял, кроме имен.
Создал модуль insert_into_group и включил.

<?php
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);
  }
}
?>

Ничего не поменялось...

Аватар пользователя edhel edhel 4 декабря 2009 в 19:51

Ну я совсем черновик написал. Там и параметры неправильно написаны, надо (&$node, $op, $a3 = NULL, $a4 = NULL). И theme('username') очевидно неправильно написано, здесь имелся ввиду кусок вашего кода theme('username', $node). И про другое я не уверен)

И куда пропал ['username'] после ['mygroup']??

В node-ru.tpl.php этот код по-любому нет смысла добавлять.

Аватар пользователя digital_sword digital_sword 4 декабря 2009 в 20:05

Попробовал все упростить, чтобы вывелось хоть что-нибудь:

<?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 '<div>'?>
    <?php print theme('username', $node) ?>
    <?php print '</div>' ?>

там работает. Только без группы...

Аватар пользователя edhel edhel 4 декабря 2009 в 22:39

Говорю же, что аргументы к функции nodeapi неверные как минимум. Во вторых проверку операции зря убрали ($op == 'view').

Если делать через node-ru.tpl.php, то конкретно хук nodeapi там никак не катит. Сделать можно и через node-ru.tpl.php, но придется все поля ручками выводить и между ними вставлять theme('username'....).

Аватар пользователя digital_sword digital_sword 4 декабря 2009 в 23:03

В справочнике API примеров нет. Как чем пользоваться догадаться сложно.
Отредактировал так:

<?php
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]. Пока глухо

Аватар пользователя edhel edhel 6 декабря 2009 в 20:15

Этот код практический рабочий, вместо mymodule надо писать реальное название модуля (как называется файл *.module). У меня по крайней мере он работает (вместо ru пишу story для тестирования).

Только выводить будет на в fieldset, а куда попало, потому что вместо $node->content['mygroup']['username'] написано $node->content['mygroup']. Вместо mygroup надо будет написать название cck-группы.