naked_child: Блог

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

Как исключить $node->body из $content в node.tpl.php?

25 октября 2009 в 1:16

Имею тип данных с ССК-полями. Задача -- убрать из отображения ноды отображение $node->body. Ищу корректное решение уже несколько дней.

Из некорректных решений нашёл/придумал одно: в node.tpl.php написать типа


 <?php $content preg_replace('`^<p>.+?</p>`','',$content1);?>
 <?php print $content ?>

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

Также посмотрел в сторону модуля Contemplate. Этот модуль, к сожалению, вынуждает почти всю логику темизации писать в шаблоне самому. Я же ищу возможность прописать в каком-либо хуке до начала формирования переменной $content строчки вида

<?php
  $node
->body_backup=$node->body;
  unset(
$node->body);
?>

и позволить друпалу дальше нормально формировать $content. Такое вообще возможно?

Разнесение $terms в шаблоне темы по $terms_$vid

26 сентября 2009 в 18:55

Как известно, $terms в шаблоне темы node.tpl.php содержит темизированные
теги, относящиеся к данной записи. Содержит все без разбора, даже если из
разных словарей.

На моём сайте есть словарь "Авторы", и выводить автора текста среди кучи
других тегов мне показалось идеологически неверным. Подумав, я решил, что
удобнее всего мне будет разложить $terms на переменные вида $terms_N, где
N -- id словаря.

В файл template.php темы добавил хук phptemplate_preprocess_node. В
основном он стандартный, только дописал несколько строк в конце:

<?php

function phptemplate_preprocess_node(&$variables) {
  
$node $variables['node'];
  if (
module_exists('taxonomy')) {
    
$variables['taxonomy'] = taxonomy_link('taxonomy terms'$node);
  }
  else {
    
$variables['taxonomy'] = array();
  }

  if (

$variables['teaser'] && $node->teaser) {
    
$variables['content'] = $node->teaser;
  }
  elseif (isset(
$node->body)) {
    
$variables['content'] = $node->body;
  }
  else {
    
$variables['content'] = '';
  }

  

$variables['date']      = format_date($node->created);
  
$variables['links']     = !empty($node->links) ? theme('links'$node->links, array('class' => 'links inline')) : '';
  
$variables['name']      = theme('username'$node);
  
$variables['node_url']  = url('node/'$node->nid);
  
$variables['terms']     = theme('links'$variables['taxonomy'], array('class' => 'links inline'));
  
$variables['title']     = check_plain($node->title);

  

// Flatten the node object's member fields.?>

Создание ноды по XMLRPC из перла

13 сентября 2009 в 11:00

Для работы с друпалом из перла по XMLRPC (в частности, создания нод) сначала надо сделать следующее:

  • -- поставить Services 6.x-2.x-dev. Именно -dev, так как в стабильной не работает node.get (или я не знаю, как заставить её работать)
  • -- активизировать в админке следующие модули:
    • Services.
    • Node Service,
    • Key Authentication,
    • System Service,
    • Taxonomy Service,
    • User Service,
    • XMLRPC Server
  • -- в настройках модуля Services выбрать Authorization module (key authentication). В появившихся настройках модуля авторизации снять галку use keys, оставив только use sessid.

Минимальный код на перле для добавления ноды под именем admin, с присвоением пятого термина из первого словаря таксономии:

use strict;
use warnings;

 use XMLRPC::Lite;
 use Data::Dumper;
 my $node = {
          'created' => '1198198800',
          'taxonomy' => {
                        '1' => [
                               5
                             ]
                      },
          'status' => '1',
          'nid' => 0,
          'body' => "This is the test",
          'teaser' => "",
          'uid' => '3',
          'name' => 'admin',
          'type' => 'story',
          'title' => "test story"
        };
 my $server=XMLRPC::Lite->proxy('http://cms.serann.local/services/xmlrpc');
 my $result= $server->call('system.connect');