<?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 для этой функции.
Что посоветуете?
Комментарии
Может есть вариант чего-нить из $form выцепить?
Да, вроде NID ноды передаётся, значит через node_load можно узнать тип ноды. Есть более простой путь?
node_load - как то энергозатратно
node_load() затратно, можно написать простейшую функцию, что-то вроде:
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];
}
как-то так, в итоге запрос для каждой ноды только один раз будет делать, так называемое статическое кеширование, вроде всё правильно, но не тестил
Можно ещё через menu_get_object() дёрнуть по nid, но не везде он может быть
[ru-api=node_load]node_load[/ru-api] имеет внутренний кэш. Запрос к базе и все хуки, которые она вызывает выполняются только один раз для каждой ноды (Per-Request Caching).
Если для типов материалов используются синонимы (например, forum/1 или product/1), то можно выдернуть тип ноды из URL.
Ладно, забил на это пока - до выяснения. Овчинка вычинки не стоит