Как я могу изменить отображение полей CCK через модуль? - PullRequest
2 голосов
/ 16 августа 2010

Я работаю над модулем drupal, и единственное, что ему нужно сделать, - это автоматически изменить отображение полей файла cck (использование файлов шаблонов не вариант).Например, этот массив:

$node->field_images[0]['view'];

Это то, что я хотел бы получить.Часть 'view' выводит изображение на основе настроек отображения для типа контента.Я хотел бы прикрепить ссылку к каждому изображению до того, как узел будет показан пользователю.

Одна вещь, которую я пробовал:

function mymodule_nodeapi(&$node, $op, $teaser, $page) {
      switch ($op) {
          case 'view':
            $node->content['field_images']['view'] = array(
              '#value' => "hello",
              '#weight' => 10
            );
          break;
      }
 }

Это вставляет текст один раз после последнегообраз.Я попытался использовать foreach для обхода всех из них и не дал результатов вообще.

Я также пробовал это:

function mymodule_nodeapi(&$node, $op, $teaser, $page) {
      switch ($op) {
          case 'view':
              // Attach link           
              foreach($node->field_images as $media) {
                  $media['view'] .= generate_link($node->nid, $media);
              }           
          break;
      }
    }

Кажется, что это должно работать, но это не«т.Я везде искал решения без всякой удачи.

Если бы кто-нибудь мог мне помочь, я был бы очень признателен.

Большое спасибо.

1 Ответ

1 голос
/ 16 августа 2010

Редактировать

Чтобы изменить значения CCK перед загрузкой страницы вне системы шаблонов, используйте параметр alter в hook_nodeapi.view вызывается до визуализации узла, alter вызывается после.


Как вы заметили, поля CCK не заполняются вовремя для мест, где вы пытаетесь поместить код.Вместо этого вам нужно использовать функцию предварительной обработки - template_preprocess_node(), которая позволит вам изменять значения непосредственно перед отображением отображаемого вывода.

function mymodule_preprocess_node(&$variables) {
  // $variables['field_name'] contains the CCK array for field_name
}

Это не изменит отображенное изображениевывод $content в шаблоне вашего узла (если вы действительно не хотите переустанавливать $variables['content'], но это позволит вам использовать $field_name в вашем шаблоне с предварительно обработанными значениями.

В качестве альтернативы, вы можетесоздайте свой собственный модуль форматирования для поля, который будет влиять на отображаемый вывод $content. Ознакомьтесь с постом googletorp в блоге Создание модуля форматирования поля для CCK .

...