Organic Groups - вывод названия группы перед заголовком блога

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

Аватар пользователя Kaom Kaom 11 декабря 2007 в 0:14

Уважаемые!
А не подскажете, как можно вывести в произвольном месте заголовок названия группы из Organic Groups?
Даже не совсем в произвольном, а перед названием темы, в выводе её блогом на главной странице или в сводке из блогов.

Пока писал - подумал, может быть через Views, но я совсем пока не понимаю принципов его работы... может подскажете мануал? Smile

Комментарии

Аватар пользователя vadbars@drupal.org vadbars@drupal.org 25 января 2008 в 23:31

На память не помню, можно посмотреть в документации на OG. А можно так - поставьте модуль Contemplate и попробуйте сделать в нем шаблон вывода для материала "группа" - там будут перечислены все переменные, доступные в OG.

Аватар пользователя neochief neochief 20 февраля 2008 в 9:02
if (($node->og_groups_names)&&(count($node->og_groups_names)>0)){
        print('<span class="group">'.l($node->og_groups_names[0],'node/'.$node->og_groups[0]).' &rarr; </span>');
}
print('<h2 class="nodetitle">'.$title.'</h2>');

В CSS делаете красоту для этого всего.

ЗЫ. тоже небось клон хабра?)

Аватар пользователя fakeyou@drupal.org fakeyou@drupal.org 14 апреля 2008 в 0:56

Поправил код:

if (($node->og_groups)&&(count($node->og_groups)>0)){
              print('<span class="group">'.l($node->og_groups[0],'node/'.$node->og_groups[0]).' &rarr; </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] =>

Аватар пользователя fakeyou@drupal.org fakeyou@drupal.org 14 апреля 2008 в 2:26

Если в редакции моего последнего сообщения, где код:

print('<span class="group">'.l($node->og_groups_both[0],'node/'.$node->og_groups[0]).' &rarr; </span>');

то не выводит ничего.

Однако

print('<span class="group">'.l($node->og_groups[0],'node/'.$node->og_groups[0]).' &rarr; </span>');

выводит:

<a href=ССЫЛКА НА ГРУППУ>НОМЕР НОДЫ, под которым идет группа</a>

Хотелось бы вытащить название этой ноды, а все остальное идеально

Аватар пользователя fakeyou@drupal.org fakeyou@drupal.org 14 апреля 2008 в 2:35

как я понимаю, надо вместо нуля в og_groups[0] дать соответствующий ноде группы номер. А как его вытащить я не знаю... в программировании полный ноль Sad

Аватар пользователя fakeyou@drupal.org fakeyou@drupal.org 14 апреля 2008 в 2:57

Наконец разобрался. Не знаю, насколько данный код имеет право на жизнь, но задачу свою выполняет отлично.

<?php
  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]).' &rarr; </span>');
      }
      print ('<a href="'.$node_url.'">'.$title.'</a>'); ?>
Аватар пользователя neochief neochief 14 апреля 2008 в 3:46

а, пропустил мимо глаз ваш print_r($node). Ваш последний вариант кода верен, но теперь можно сделать еще круче, например, если нода принадлежит не одной группе, этот код выведет все названия через запятую. Если же только одна, то тоже все будет хорошо. Код:

$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 .= ' &rarr; ';

print ($group_links.l($title,$node_url));

PS. как видите, у ссылки будет класс group, так что вы сможете прописать стили ей без лишнего span'а, как в вашем варианте. Плюс, всегда стоит использовать функцию l() для создания ссылок, потому что она учитывает все моменты, например базовый адрес вашего сайта (к примеру, тема может сьехать, если сайт лежит по адресу http://site.com/dir, а не в стандартном http://site.com )
И второй момент, не забудьте сделать условие в шаблоне, что не надо выводить заголовок ноды ссылкой, если юзер находится в самой этой ноде - это грамотно как с позиции юзабилити, так и СЕО. Проапдейченный код:

$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 .= ' &rarr; ';

if ($page == 0)
  $node_title = l($title,$node_url);
else
  $node_title = $title;

$node_title = '<h3>'.$node_title.'</h3>';

print ($group_links.$node_title);

Аватар пользователя HEm@api.drupal.ru HEm@api.drupal.ru 10 сентября 2008 в 10:44

друпал 6.3
делаю print_r($node); перед выводом заголовка, выводится много чего, но ничем похожим на относящееся к OG не пахнет, что не так делаю?

Сделал сначала материал типа "Группа", завел там несколько штук. Потом сделал материал типа "Запись в группу" с параметром "Standard group post (typically only author may edit). Sends email notifications.".

Аватар пользователя fullpipe fullpipe 9 декабря 2008 в 15:20

А как проверить находиться ли пользователь на странице группы, что бы не выводить название группы в заголовке?

Аватар пользователя Folcon Folcon 27 марта 2009 в 11:16

господа а можно этот код переделать чтобы выводил не все группы через запятую, а только одну например первую.

спасибо.

Аватар пользователя keereel@drupal.org keereel@drupal.org 7 мая 2009 в 1:58

У меня тоже в результате получилось следующее: ссылка на группу была правильной, а на саму ноду - без домена. В коде страницы было видно, что перед ссылкой на ноду появился ещё один слеш (//adres-stranitsi вместо /adres-stranitsi), что воспринималось браузером как http://adres-stranitsi.

Я, в результате, сделал так (редактировал, кстати, modules/og/node-og-group-post.tpl.php, что, мне кажется, совсем неправильно; если кто-то подскажет, как и где это сделать лучше - буду благода). Если код отобразится неправильно - не обессудьте, в местном редакторе или предпросмотр показывает не так, как будет, или теги code, blockcode и pre не работают..

<h2><font size="-1"><?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 .= ' &rarr; ';
 
print ($group_links); ?></font></h2><h1><a href="<?php print $node_url ?>" title="<?php print $title ?>"><?php print $title ?></a></h1>
Аватар пользователя keereel@drupal.org keereel@drupal.org 16 мая 2009 в 15:26

neochief, спасибо! вопрос не совсем по теме ещё: можно ли как-то сделать, что бы оформление тизера и ноды (я имею в виду расположение элементов, строк), предусмотренное в теме, не перекрывалось органикгрупсом?

Аватар пользователя lopata24 lopata24 14 октября 2009 в 17:15

Впихнул в свой 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 .= ' &rarr; ';

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) {

Аватар пользователя lopata24 lopata24 21 октября 2009 в 15:58

Ваша ссылка дала мне хорошую мысль и все решилось добавлением if ($group_links) перед этой самой 15 строкой )
Спасибо Wink

p.s. почему-то через пару дней все сломалось )))
Но внимательное чтение мануала, помогло найти ответ, впихиванием всего того, что нужно в файл node-og-group-post.tpl.php, а не в node.tpl.php

Аватар пользователя lopata24 lopata24 30 октября 2009 в 14:05

подскажите, как в этом коде

<?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 .= ' &rarr; ';

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>');
?>

задать другой цвет имени группы и стрелке → ???

Аватар пользователя petropulos petropulos 27 февраля 2012 в 15:11

У меня после print_r($node) выводит следующий результат(привожу только кусочек вывода): ... [og_groups] => Array ( [2414] => 2414 ) [og_groups_both] => Array ( [2414] => blabla )...

соответственно код -

"<a href="mailto:fakeyou@drupal.org">fakeyou@drupal.org</a>" wrote:
print(''.l($node->og_groups_both[$node->og_groups[0]],'node/'.$node->og_groups[0]).' → ');

- ничего не выводит, из-за того что у меня почему-то [og_groups] => Array ( [2414] => 2414 ) такого вида..

подскажите пожалуйста как это можно исправить.

Спасибо.