Видимость текстового блока и 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 (хуки и константы на офсайте видел а эти не нашел).

Комментарии


Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Применить"
Опубликовано edhel в вт, 21/08/2007 - 07:16.

Не надо писать global $node — просто var_dump($node).

http://api.drupal.org/ - справочник по функциям, хукам и проч.


Опубликовано orbisnull в вт, 21/08/2007 - 10:39.

var_dump($node) выдает NULL , ничего не понимаю...
адрес - http://test-e26.ru/node/16 , т.е. просмотр полной ноды...
да, кстати, я это пишу не в теме (там все работает) а в блоке (формат ввода - PHP)...


Опубликовано edhel в вт, 21/08/2007 - 14:11.

У меня чё-то тоже не пашет так) Хотя вроде раньше работало в каких-то случаях... Ща покапаю...

node.module:729: $node->body = check_markup($node->body, $node->format, FALSE);

body генерируется в функции check_markup, а та в конце концов вызывает drupal_eval, в которой только переменная $code доступна...


Опубликовано orbisnull в вт, 21/08/2007 - 13:57.

Пока сделал вот так:

<?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)); ?> как я понимаю лишний раз грузим ноду, а не хотелось бы, хотя конечно редактировать приходится реже чем читать...


Опубликовано edhel в вт, 21/08/2007 - 14:18.

Чтобы не грузить ноду второй раз можно попробовать такой финт ушами: в node.tpl.php добавить <?php $GLOBALS['node'] = $node;?> и использовать всё-таки глобальную переменную $node.

Или модулек с хуком:

<?php
function mymodule_nodeapi(....) {
   if (
$op == 'view' && $page$GLOBALS['node'] = $node;
}
?>


Опубликовано orbisnull в вс, 02/12/2007 - 05:43.

А откуда взялась $page ? и как можно определить что мы просматриваем полную ноду а не список?


Опубликовано edhel в вс, 02/12/2007 - 05:46.

А откуда взялась $page ?

<?php
function mymodule_nodeapi(&$node$op$teaser NULL$page NULL)  {
   ...
}
?>

и как можно определить что мы просматриваем полную ноду а не список?

$page оно и есть

см. http://api.drupal.org/api/function/hook_nodeapi/5


Опубликовано andypost@drupal.org в вс, 02/12/2007 - 06:38.

http://drupal.ru/node/9345#comment-60900


Опубликовано himmelfarb в вт, 13/07/2010 - 12:48.

Похожая задача - не отображать на форуме включённый в node.tpl фрагмент html-кода - http://www.drupal.ru/node/46719
Был бы очень признателен, если кто-нибудь помог мне решить эту задачу...