[РЕШЕНО] Не подхватытвает php-код

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

Аватар пользователя cobanja cobanja 16 июня 2012 в 11:02

День добрый, уважаемые!
Такой вопрос, туплю вввиду php-неграмотности.
При вставке <?php print $node->nid; ?> в блок сайта выводит

Notice: Undefined variable: node in eval()
Notice: Trying to get property of non-object in eval()
Notice: Undefined variable: node in eval()
Notice: Trying to get property of non-object in eval()
Notice: Undefined variable: node in eval()
Notice: Trying to get property of non-object in eval()
Notice: Undefined variable: node in eval()
Notice: Trying to get property of non-object in eval()

не могу понять, что именно ему не нравится, ведь переменная такая есть, в node.tpl.php нормально подхватывается...

Комментарии

Аватар пользователя sg85 sg85 16 июня 2012 в 11:27

может переменная не объект ноды?
т.е. есть ли выше запись node=node_load(nid)? только со значками бакса, кстати, где он на андроиде?)

Аватар пользователя cobanja cobanja 3 декабря 2012 в 15:21

Да, с самим php все нормально, вставляя дефолтный код из примера /filter/tips (в самом низу), всёё срабатывает)

Аватар пользователя cobanja cobanja 16 июня 2012 в 11:28

Блоки в моём случа имеют отношение к node.tpl.php потому, что я решил использовать переменную из этого файла, но как я понимаю, чего-то я не учёл... Тугадум, что сказать)

Аватар пользователя sg85 sg85 16 июня 2012 в 11:32

тогда остается убедиться, что в переменную действительно попадает объект ноды, а не попасть он туда может, если переменная nid содержит чтонибудь не то, к примеру слово "вобла" вместо индекса реальной ноды

Аватар пользователя cobanja cobanja 16 июня 2012 в 11:38

Да, но в node.tpl.php есть кусочек кода div id="node-<?php print $node->nid; ?>, на который я и опирался в своих действиях. Значит nid срабатывает, разве нет?

Аватар пользователя sg85 sg85 16 июня 2012 в 11:44

только меня ваши вопросы немного смущают... если вопрос перефразировать в как вывести nid в шаблоне ноды, то на сколько помню тупо через переменную nid, если вы про это, и согласен с андедом, что общего у блоков с шаблоном самой ноды?

Аватар пользователя cobanja cobanja 16 июня 2012 в 11:51

Но меня интересует вывод не в шаблоне ноды, а именно в блоке - я хочу присвоить уникальный id="" элементу в блоке. Самое простое - задать ему через id="style-nid". А вот как прописать именно часть после дефиса, не до конца понимаю...

Аватар пользователя cobanja cobanja 16 июня 2012 в 12:39

Пффф, всё оказалось действительно сложнее, чем я думал.
В итоге прикрутил

Xdiv id="vk_comments-<?php if (arg(0) == 'node' && is_numeric(arg(1))) {
$node = node_load(arg(1));
print $node->nid;
}
?>"XX/divX
Xscript type="text/javascript"X
VK.Widgets.Comments("vk_comments-<?php if (arg(0) == 'node' && is_numeric(arg(1))) {
$node = node_load(arg(1));
print $node->nid;
}
?>", {limit: 15, width: "985", attach: false});
X/scriptX
(не буду чистить, вдруг кому пригодится)
На отдельных страницах отрабатывает на ура, а вот на одной странице все nid куда-то исчезают...

Аватар пользователя sg85 sg85 16 июня 2012 в 12:47

Блин, я не стал ничего писать т.к. drupby уже все написал...
node_load($nid), т.е. вы загружаете ноду по её индексу, а потом из её объекта извлекаете этот же индекс, и все? для чего это нужно?))
<div id="vk_comments-<?php print (arg(0) == 'node' && is_numeric(arg(1))?arg(1):'возможно_пригодится';?>">и т.д.

Аватар пользователя sg85 sg85 16 июня 2012 в 12:50

"cobanja" wrote:
Аааа, я понял. Это потому, что я не нахожусь непосредственно на странице с нодой, так?

Если быть точнее, то вы находитесь в самом блоке, который ничего общего (кроме глобальных переменных) со всей остальной частью сайта не имеет

Аватар пользователя cobanja cobanja 16 июня 2012 в 13:21

Xdiv id="vk_comments-<?php print (arg(0) == 'node' && is_numeric(arg(1)); ?>"XX/divX
Xscript type="text/javascript"X
VK.Widgets.Comments("vk_comments-<?php print (arg(0) == 'node' && is_numeric(arg(1)); ?>", {limit: 15, width: "985", attach: false});
X/scriptX
Пропал, в смысле его вообще нет)

Аватар пользователя sg85 sg85 16 июня 2012 в 13:45

Вы это делаете через админку? Т.е. в админке создали блок, указали формат ввода php, и в самом тексте блока пишите div, кроме того, указали выводить этот блок только при node/*? Если да

<?php if(is_numeric($nid = arg(1))):?>
  <div id="vk_comments-<?php print $nid;?>">
  ...
  </div>
<?php endif; ?>
Аватар пользователя cobanja cobanja 16 июня 2012 в 14:32

Блок прикреплен к каждому тизеру через cck. То есть, под каждым анонсом - вот такое поле с комментариями)
Внутри ноды всё получается просто отлично, а вот когда смотришь на страницу с анонсами, то под тизером просто пустое поле. Как-то так...

Аватар пользователя sg85 sg85 17 июня 2012 в 1:00

"cobanja" wrote:
Блок прикреплен к каждому тизеру через cck. То есть, под каждым анонсом - вот такое поле с комментариями)
Внутри ноды всё получается просто отлично, а вот когда смотришь на страницу с анонсами, то под тизером просто пустое поле. Как-то так...

Бедный мой мозг.... так сказали бы раньше, что "блок" в данном случае - в понимании верстки(т.е. простое CCK поле) а не друпала, ибо у друпала понятие "блок" это совершенно иное, суть проблемы теперь ясна(вроде), когда вы смотрите тизеры, то в url nid'ом и не пахнет, потому и пусто, однако, это поле выводится как раз через шаблон ноды node--чтототам.tpl.php:

if($teaser){
//выводим шаблон тизера
} else{
//выводим шаблон ноды
}

в нем у вас нода уже будет загружена, и получить nid труда не составит, в 6 это $nid, в 7 не помню, возможно как раз $node->nid, правда про 6 тоже уже не очень помню. И да, кстати, если div у вас по сути формируется внутри шаблона, а его наполняется содержимым явой, то само cck поле не нужно, ибо все это по сути идет простая верстка.

Аватар пользователя cobanja cobanja 18 июня 2012 в 9:09

sg85, спасибо большое за помощь, скрутил свой node--.tpl.php - получилось, как надо)) Без Вас бы не справился) И извините за нервотрёпку - понял, что через сск не вариант пробовать такие вещи)