Уважаемые!
А не подскажете, как можно вывести в произвольном месте заголовок названия группы из Organic Groups?
Даже не совсем в произвольном, а перед названием темы, в выводе её блогом на главной странице или в сводке из блогов.
Пока писал - подумал, может быть через Views, но я совсем пока не понимаю принципов его работы... может подскажете мануал?
Комментарии
Наверное, $node->title
см. файл theme.inc :
* - $node->title: The title of the node.
На память не помню, можно посмотреть в документации на OG. А можно так - поставьте модуль Contemplate и попробуйте сделать в нем шаблон вывода для материала "группа" - там будут перечислены все переменные, доступные в OG.
print('<span class="group">'.l($node->og_groups_names[0],'node/'.$node->og_groups[0]).' → </span>');
}
print('<h2 class="nodetitle">'.$title.'</h2>');
В CSS делаете красоту для этого всего.
ЗЫ. тоже небось клон хабра?)
neochief, а где это надо писать?
в node.tpl.php, в том месте, где должен выводится заголовок
К сожалению, данный код выводит только заголовок. без названия группы. Что может мешать?
слабо сделать print_r($node) и посмотреть внутрь обьекта ноды? там же все видно
Поправил код:
print('<span class="group">'.l($node->og_groups[0],'node/'.$node->og_groups[0]).' → </span>');
}
print l($title, $node_url); ?>
Единственное, не пойму все-таки, как вывести в названии группы вместо номера ноды title...
Вот print_r($node)
[log] => [format] => 1 [uid] => 2 [name] => chumakova [picture] => files/00/picture-2.jpg [data] => a:3:{s:8:"og_email";s:1:"0";s:14:"picture_delete";s:0:"";s:14:"picture_upload";s:0:"";} [path] => blog/korporativnoe_upravlenie/2/6 [og_groups] => Array ( [0] => 5 ) [og_groups_both] => Array ( [5] => Корпоративное управление ) [og_public] => 1 [tags] => Array ( [1] => Array ( [8] => stdClass Object ( [tid] => 8 [vid] => 1 [name] => дивиденды [description] => [weight] => 0 ) ) ) [last_comment_timestamp] => 1208102380 [last_comment_name] => [comment_count] => 0 [taxonomy] => Array ( [9] => stdClass Object ( [tid] => 9 [vid] => 4 [name] => Корпоративное управление [description] => [weight] => 0 ) [2] => stdClass Object ( [tid] => 2 [vid] => 2 [name] => Теория [description] => [weight] => 0 ) [8] => stdClass Object ( [tid] => 8 [vid] => 1 [name] => дивиденды [description] => [weight] => 0 ) ) [readmore] => [content] => Array ( [body] => Array ( [#weight] => 0 [#value] =>
Еще поправка:
print('<span class="group">'.l($node->og_groups_both[0],'node/'.$node->og_groups[0]).' → </span>');
}
print ('<a href="'.$node_url.'">'.$title.'</a>');
на что поправить print(''.l($node->og_groups_both[0],'node/'.$node->og_groups[0]).' → '); чтобы выводить
а что сейчас выводит?
(похоже мой код 10 марта чуть устарел)
Если в редакции моего последнего сообщения, где код:
то не выводит ничего.
Однако
выводит:
Хотелось бы вытащить название этой ноды, а все остальное идеально
как я понимаю, надо вместо нуля в og_groups[0] дать соответствующий ноде группы номер. А как его вытащить я не знаю... в программировании полный ноль
Наконец разобрался. Не знаю, насколько данный код имеет право на жизнь, но задачу свою выполняет отлично.
if (($node->og_groups)&&(count($node->og_groups)>0)){
print('<span class="group">'.l($node->og_groups_both[$node->og_groups[0]],'node/'.$node->og_groups[0]).' → </span>');
}
print ('<a href="'.$node_url.'">'.$title.'</a>'); ?>
да, скорее всего это именно то, что нужно
а, пропустил мимо глаз ваш print_r($node). Ваш последний вариант кода верен, но теперь можно сделать еще круче, например, если нода принадлежит не одной группе, этот код выведет все названия через запятую. Если же только одна, то тоже все будет хорошо. Код:
foreach ($node->og_groups_both as $key => $name) {
$group_links[] = l($name,'node/'.$key,array('class'=>'group'));
}
$group_links = implode(', ',$group_links);
if ($group_links)
$group_links .= ' → ';
print ($group_links.l($title,$node_url));
PS. как видите, у ссылки будет класс group, так что вы сможете прописать стили ей без лишнего span'а, как в вашем варианте. Плюс, всегда стоит использовать функцию l() для создания ссылок, потому что она учитывает все моменты, например базовый адрес вашего сайта (к примеру, тема может сьехать, если сайт лежит по адресу http://site.com/dir, а не в стандартном http://site.com )
И второй момент, не забудьте сделать условие в шаблоне, что не надо выводить заголовок ноды ссылкой, если юзер находится в самой этой ноде - это грамотно как с позиции юзабилити, так и СЕО. Проапдейченный код:
foreach ($node->og_groups_both as $key => $name) {
$group_links[] = l($name,'node/'.$key,array('class'=>'group'));
}
$group_links = implode(', ',$group_links);
if ($group_links)
$group_links .= ' → ';
if ($page == 0)
$node_title = l($title,$node_url);
else
$node_title = $title;
$node_title = '<h3>'.$node_title.'</h3>';
print ($group_links.$node_title);
subscribing
спасибо, интересно
запомнить!
друпал 6.3
делаю print_r($node); перед выводом заголовка, выводится много чего, но ничем похожим на относящееся к OG не пахнет, что не так делаю?
Сделал сначала материал типа "Группа", завел там несколько штук. Потом сделал материал типа "Запись в группу" с параметром "Standard group post (typically only author may edit). Sends email notifications.".
нашел, писать это надо в modules/og/node-og-group-post.tpl.php
А как проверить находиться ли пользователь на странице группы, что бы не выводить название группы в заголовке?
господа а можно этот код переделать чтобы выводил не все группы через запятую, а только одну например первую.
спасибо.
<?phpl($title,$node_url);?>
У меня это не дает полную ссылку типа http://www.site.com/node/3 , а только http://node/3
У меня тоже в результате получилось следующее: ссылка на группу была правильной, а на саму ноду - без домена. В коде страницы было видно, что перед ссылкой на ноду появился ещё один слеш (//adres-stranitsi вместо /adres-stranitsi), что воспринималось браузером как http://adres-stranitsi.
Я, в результате, сделал так (редактировал, кстати, modules/og/node-og-group-post.tpl.php, что, мне кажется, совсем неправильно; если кто-то подскажет, как и где это сделать лучше - буду благода). Если код отобразится неправильно - не обессудьте, в местном редакторе или предпросмотр показывает не так, как будет, или теги code, blockcode и pre не работают..
foreach ($node->og_groups_both as $key => $name) {
$group_links[] = l($name,'node/'.$key,array('class'=>'group'));
}
$group_links = implode(', ',$group_links);
if ($group_links)
$group_links .= ' → ';
print ($group_links); ?></font></h2><h1><a href="<?php print $node_url ?>" title="<?php print $title ?>"><?php print $title ?></a></h1>
node-og-group-post.tpl.php нужно просто скопировать к себе в тему и обновить кеш. И там потом уже и править.
neochief, спасибо! вопрос не совсем по теме ещё: можно ли как-то сделать, что бы оформление тизера и ноды (я имею в виду расположение элементов, строк), предусмотренное в теме, не перекрывалось органикгрупсом?
Впихнул в свой node.tpl.php это
<?php $group_links = array();
foreach ($node->og_groups_both as $key => $name) {
$group_links[] = l($name,'node/'.$key,array('class'=>'group'));
}
$group_links = implode(', ',$group_links);
if ($group_links)
$group_links .= ' → ';
if (
$page == 0)$node_title = l($title,$node_url);
else
$node_title = $title; $node_title = '<h3>'.$node_title.'</h3>';
print (
$group_links);print ('<a href="'.$node_url.'">'.$title.'</a>');
?>
Все супер отображается как надо. Только вот на некоторых страницах гордо одиноко красуется ошибка
warning: Invalid argument supplied for foreach() in V:\home\test1.ru\subdomain\sites\all\themes\Untitled3\node.tpl.php on line 15
в 15ой строке
foreach ($node->og_groups_both as $key => $name) {
help!!!
google is your friend
http://www.webdeveloper.com/forum/showthread.php?t=175848
Ваша ссылка дала мне хорошую мысль и все решилось добавлением if ($group_links) перед этой самой 15 строкой )
Спасибо
p.s. почему-то через пару дней все сломалось )))
Но внимательное чтение мануала, помогло найти ответ, впихиванием всего того, что нужно в файл node-og-group-post.tpl.php, а не в node.tpl.php
подскажите, как в этом коде
<?php$group_links = array();
foreach ($node->og_groups_both as $key => $name) {
$group_links[] = l($name,'node/'.$key,array('class'=>'group'));
}
$group_links = implode(', ',$group_links);
if ($group_links)
$group_links .= ' → ';
if ($page == 0)
$node_title = l($title,$node_url);
else
$node_title = $title;
$node_title = $node_title;
print ($group_links);
print ('<a href="'.$node_url.'">'.$title.'</a>');
?>
задать другой цвет имени группы и стрелке → ???
У меня после print_r($node) выводит следующий результат(привожу только кусочек вывода): ... [og_groups] => Array ( [2414] => 2414 ) [og_groups_both] => Array ( [2414] => blabla )...
соответственно код -
- ничего не выводит, из-за того что у меня почему-то [og_groups] => Array ( [2414] => 2414 ) такого вида..
подскажите пожалуйста как это можно исправить.
Спасибо.