Видимость текстового блока и TinyMCE в зависимости от типа ноды
Прислано: orbisnull
вт, 21/08/2007 - 05:55
Здравствуйте, не могу понять как используя настройку видимости блока через PHP указать, что его надо выводить только на материалах с типом story | blog | page, на страницах /node/add/* и node/*/edit, и тоже самое с редактором TinyMCE. Т.е. я хочу чтоб редактор показывался только при добавлении/ редактировании этих страниц и выводилась краткое напоминание в блоке, и не затрагивались остальные типы материалов (категории, группы, они тоже node).
Создал заметку с форматом ввода Php (для тестов):
<?php
global $user;
if (in_array('Approved Role',$user->roles)) {
echo "TRUE";
} else {
echo "FALSE";
}
?>выводит false
<?php
global $node;
var_dump($node);
?>выводит null... а я хотел использовать $node->type
И вобще где можно посмотреть предоределенные переменные Drupal (хуки и константы на офсайте видел а эти не нашел).
- orbisnull's blog
- Для комментирования войдите или зарегистрируйтесь
Не надо писать global $node — просто var_dump($node).
http://api.drupal.org/ - справочник по функциям, хукам и проч.
- Для комментирования войдите или зарегистрируйтесь
var_dump($node) выдает NULL , ничего не понимаю...
адрес - http://test-e26.ru/node/16 , т.е. просмотр полной ноды...
да, кстати, я это пишу не в теме (там все работает) а в блоке (формат ввода - PHP)...
- Для комментирования войдите или зарегистрируйтесь
У меня чё-то тоже не пашет так) Хотя вроде раньше работало в каких-то случаях... Ща покапаю...
node.module:729: $node->body = check_markup($node->body, $node->format, FALSE);
body генерируется в функции check_markup, а та в конце концов вызывает drupal_eval, в которой только переменная $code доступна...
- Для комментирования войдите или зарегистрируйтесь
Пока сделал вот так:
<?php
$match_t = FALSE;
$types = array('story' => 1, 'page' => 1, 'blog' => 1);
if (arg(0) == 'node'){
if(is_string(arg(1)) and arg(1)==='add'){
if (isset($types[arg(2)])) {
$match_t = TRUE;
}
}
if (is_numeric(arg(1)) and arg(2)==='edit') {
$nid = arg(1);
$node = node_load(array('nid' => $nid));
$type = $node->type;
if (isset($types[$type])) {
$match_t = TRUE;
}
}
}
return $match_t;
?>Но не нравиться
<?php node_load(array('nid' => $nid)); ?> как я понимаю лишний раз грузим ноду, а не хотелось бы, хотя конечно редактировать приходится реже чем читать...
- Для комментирования войдите или зарегистрируйтесь
Чтобы не грузить ноду второй раз можно попробовать такой финт ушами: в node.tpl.php добавить <?php $GLOBALS['node'] = $node;?> и использовать всё-таки глобальную переменную $node.
Или модулек с хуком:
<?php
function mymodule_nodeapi(....) {
if ($op == 'view' && $page) $GLOBALS['node'] = $node;
}
?>- Для комментирования войдите или зарегистрируйтесь
А откуда взялась $page ? и как можно определить что мы просматриваем полную ноду а не список?
- Для комментирования войдите или зарегистрируйтесь
А откуда взялась $page ?
<?php
function mymodule_nodeapi(&$node, $op, $teaser = NULL, $page = NULL) {
...
}
?>и как можно определить что мы просматриваем полную ноду а не список?
$page оно и есть
см. http://api.drupal.org/api/function/hook_nodeapi/5
- Для комментирования войдите или зарегистрируйтесь
http://drupal.ru/node/9345#comment-60900
- Для комментирования войдите или зарегистрируйтесь
Похожая задача - не отображать на форуме включённый в node.tpl фрагмент html-кода - http://www.drupal.ru/node/46719
Был бы очень признателен, если кто-нибудь помог мне решить эту задачу...
- Для комментирования войдите или зарегистрируйтесь





Комментарии