Темизация формы комментарие в зависимости от типа ноды

Аватар пользователя volocuga@drupal.org volocuga@drupal.org 24 августа 2010 в 18:00
<?php

function grey_theme() {
  return array(
    
'comment_form' => array(
    
'arguments' => array('form' => NULL),
    ),
  );
}
   function 
grey_comment_form($form) {
   unset(
$form['_author']);
   unset(
$form['comment_filter']['format']);
   unset(
$form['comment']['#type']['#title']);
   unset (
$form['homepage']);
   unset(
$form['preview']);

if (

$node->type == 'product') { //вялая попытка задать тип ноды
   
   
$form['comment_filter']['comment'] = array(
    
'#type' => 'textarea',
    
'#title' => t('Your review'),
    
'#rows' => 5,
    
'#default_value' => $default,
    
'#required' => TRUE,
  );

   

$form['submit'] = array(
     
'#type' => 'submit',
     
'#value' => t('Submit your review'),
     
'#weight' => 19     
     
);
       }
     
}

?>

Это код в template.php, темизирует форму комментариев. Недостаток: темизирует везде, а мне нужно только для комментариев, которіе находятся в типе ноды "product"

Собственно, условие с $node->type == 'product не работает, так как нет входящего аргумента $node для этой функции.

Что посоветуете?

Комментарии

Аватар пользователя volocuga@drupal.org volocuga@drupal.org 24 августа 2010 в 18:30

"RxB" wrote:
чего-нить из $form выцепить?

Да, вроде NID ноды передаётся, значит через node_load можно узнать тип ноды. Есть более простой путь?

node_load - как то энергозатратно

Аватар пользователя Виктор Степаньков ака RxB Виктор Степаньк... 24 августа 2010 в 18:57

node_load() затратно, можно написать простейшую функцию, что-то вроде:

mymodule_nodetype($nid){
static $types;
if(!isset($types[$nid])){
$sql = 'SELECT type FROM {node} WHERE nid = %d';
$types[$nid] = db_result(db_query($sql, $nid));
}
return $types[$nid];
}

как-то так, в итоге запрос для каждой ноды только один раз будет делать, так называемое статическое кеширование, вроде всё правильно, но не тестил

Аватар пользователя Ch Ch 24 августа 2010 в 19:54

"<a href="mailto:volocuga@drupal.org">volocuga@drupal.org</a>" wrote:
node_load - как то энергозатратно

[ru-api=node_load]node_load[/ru-api] имеет внутренний кэш. Запрос к базе и все хуки, которые она вызывает выполняются только один раз для каждой ноды (Per-Request Caching).

Если для типов материалов используются синонимы (например, forum/1 или product/1), то можно выдернуть тип ноды из URL.