Сниппет выводит документы термина

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

Аватар пользователя Dec0der Dec0der 30 января 2009 в 11:39

нужен сниппет, который выводил бы определённое количество нод (название, дата и автор, БЕЗ тизера) определённого термина. для 6-ки!!!
Может кто видел?

Комментарии

Аватар пользователя Dec0der Dec0der 30 января 2009 в 13:36

нет там для 6-ки...

Например вот-этот работает нормально. Но он выводит и тизер. А как без него?

<?php
$tids = array(7);
$num = 5;
$content = '';

$query_tids = implode(', ', $tids);
$result = db_query('SELECT DISTINCT nid FROM {term_node} WHERE tid IN ('. $query_tids .') ORDER BY nid DESC LIMIT %d',$num);
while($item = db_fetch_object($result)) {
$content .= node_view(node_load($item->nid));
}
return $content;
?>

Аватар пользователя Dec0der Dec0der 30 января 2009 в 13:50

HIgor1968, taxonomy_quick_find не совсем для этого предназначен, даже наверное совсем не для этого. Мне нужно вывести блок нод определённого термина, а не блок похожих нод. Тем более он не выводит автора и дату...

Аватар пользователя HIgor1968 HIgor1968 30 января 2009 в 14:17

Все можно сделать поправив код ВАШЕГО снипета.

node_load($item->nid)

Возвращает ноду как массив. посмотрите его с помощью print_r
И соответственно в $content пополняйте нужными ВАМ полями.

Аватар пользователя HIgor1968 HIgor1968 30 января 2009 в 14:25

Наименование материала и автор например.
print_r оставил закоментированным намеренно.
<?php
$tids = array(7);
$num = 5;
$content = '';

$query_tids = implode(', ', $tids);
$result = db_query('SELECT DISTINCT nid FROM {term_node} WHERE tid IN ('. $query_tids .') ORDER BY nid DESC LIMIT %d',$num);
while($item = db_fetch_object($result)) {
$nnn = node_load($item->nid);
$content .= $nnn->title . ' - ' . $nnn->name . '
';
// print '

'. check_plain(print_r($nnn, 1)) .'

';
}
return $content;
?>

Аватар пользователя Dec0der Dec0der 30 января 2009 в 15:31

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

Аватар пользователя HIgor1968 HIgor1968 30 января 2009 в 16:45

Одно из 2-х вре равно прийдется изучить:

  1. Или PHP что-бы снипет до ума довести, собственно работы тут на 15 минут.
  2. Или Вьюс
Аватар пользователя HIgor1968 HIgor1968 30 января 2009 в 20:05

<?php
$tids = array(7);
$num = 5;
$content = '';

$query_tids = implode(', ', $tids);
$result = db_query('SELECT DISTINCT nid FROM {term_node} WHERE tid IN ('. $query_tids .') ORDER BY nid DESC LIMIT %d',$num);
while($item = db_fetch_object($result)) {
$nnn = node_load($item->nid);
$content .= 'path . '" title = "' .
$nnn->title . '">' .
$nnn->title . '
' .
format_date($nnn->created, 'custom', 'd.m.Y') .
'
name .
'">' .
$nnn->name . '
' . '
';
// print '

'. check_plain(print_r($nnn, 1)) .'

';
}
return $content;

?>

Так?

Аватар пользователя olk olk 31 января 2009 в 9:17

<?php
$tids = array(51); // номер термина
$maxcount = 10; // максимальное количество нод для вывода
$query_tids = implode(', ', $tids);
$result = db_rewrite_sql(db_query_range("SELECT DISTINCT(n.nid) AS nid,n.title,n.uid,u.name,n.created FROM
{term_node} t INNER JOIN {node} n ON n.nid=t.nid AND t.tid IN ($query_tids)
INNER JOIN {users} u ON n.uid=u.uid",0,$maxcount),'n');
$items = array();
while($res = db_fetch_object($result)) {

$items[] = l($res->title,"node/$res->nid").' '.format_date($res->created).' '.theme('username',$res);
}
if ( count($items) ) {
echo theme('item_list',$items);
}
?>

Аватар пользователя Dec0der Dec0der 2 февраля 2009 в 10:05

olk, выдаёт ошибку:

recoverable fatal error: Object of class mysqli_result could not be converted to string in X:\home\сайт\www\includes\database.mysqli.inc on line 368.
warning: mysqli_fetch_object() expects parameter 1 to be mysqli_result, string given in X:\home\сайт\www\includes\database.mysqli.inc on line 144.

что не так?

HIgor1968, похоже. Только меня смущает то что нода возвращается как массив.

и ещё хотелось бы в блоке снизу (именно снизу) вставить пару строчек текста. А так текст не отображается если написать его после сниппета.

Аватар пользователя HIgor1968 HIgor1968 2 февраля 2009 в 11:24

Нода по определению массив.
Текст надо писать в строку после BR или вместо.
Специально разделил текст на часть - можешь менять их местами.
Строки разделители можешь просто убрать.
<?php
$tids = array(7);
$num = 5;
$content = '';

$query_tids = implode(', ', $tids);
$result = db_query('SELECT DISTINCT nid FROM {term_node} WHERE tid IN ('. $query_tids .') ORDER BY nid DESC LIMIT %d',$num);
while($item = db_fetch_object($result)) {
$nnn = node_load($item->nid);
$content .=
//часть строки 1. заголовок текста короче конечно написать как указал olk с помощью l()
//но не вижу смыславызова функции когда есть готовый URL
'path . '" title = "' .
$nnn->title . '">' .
$nnn->title . '
' .
//часть строки 2. можешь вставить что-нибудь или просто убрать этот кусок
' текст между заголовком и датой ' .
//часть строки 3. Печать даты создания документы по шаблону 'd.m.Y'
format_date($nnn->created, 'custom', 'd.m.Y') .
//часть строки 4. Разделитель перед печатью имени пользователя
// и ссылки можно переписать по своему
'
' .
//часть строки 5. Печать даты создания документы по шаблону 'd.m.Y'
'name .
'">' .
$nnn->name . '
' .
//часть строки 6. финалочка
'
ляляля наш текст';
}
return $content;

?>

Аватар пользователя Dec0der Dec0der 2 февраля 2009 в 11:28

в списке не одна нода. и получается, что текст "ляляля наш текст" выводится после каждой ноды...
А нужно внизу блока (после списка нод).

Аватар пользователя HIgor1968 HIgor1968 2 февраля 2009 в 12:10

Лучше даже echo - быстрее будет.
return вернул результат и покинул блок.
а print или echo печатает и дальше выполняет блок.
Номер кошелька почтой послал (на пиво за твое здоровье:))

Аватар пользователя HIgor1968 HIgor1968 2 февраля 2009 в 12:14

Echo - что дали - то пою пишу
print - форматный вывод, можно параметры строке передавать соответственно печатает медленнее.

Аватар пользователя HIgor1968 HIgor1968 2 февраля 2009 в 13:57

Тогда
<?php
//часть строки 1. заголовок текста короче конечно написать как указал olk с помощью l()
//но не вижу смыславызова функции когда есть готовый URL
'path . '" title = "' .
$nnn->title . '">' .
$nnn->title . '
' .
?>

Меняем как предложил olk. Только добавив всплывающую подсказку

<?php
//часть строки 1. заголовок текста короче конечно написать как указал olk с помощью l()
//но не вижу смыславызова функции когда есть готовый URL
$opt['attributes']['title'] = $nnn->title;
l($nnn->title,"node/$nnn->nid", $opt) .
?>

Аватар пользователя HIgor1968 HIgor1968 2 февраля 2009 в 14:07

Окончательный код

<?php
$tids = array(7);
$num = 5;
$content = '';

$query_tids = implode(', ', $tids);
$result = db_query('SELECT DISTINCT nid FROM {term_node} WHERE tid
IN ('. $query_tids .') ORDER BY nid DESC LIMIT %d',$num);
while($item = db_fetch_object($result)) {
$nnn = node_load($item->nid);
$opt['attributes']['title'] = $nnn->title;
$content .=
//часть строки 1. Заголовок
l($nnn->title,"node/$nnn->nid", $opt) .
//часть строки 2. можешь вставить что-нибудь или просто убрать этот кусок
' текст между заголовком и датой ' .
//часть строки 3. Печать даты создания документы по шаблону 'd.m.Y'
format_date($nnn->created, 'custom', 'd.m.Y') .
//часть строки 4. Разделитель перед печатью имени пользователя
// и ссылки можно переписать по своему
'
' .
//часть строки 5. Печать даты создания документы по шаблону 'd.m.Y'
'name .
'">' .
$nnn->name . '
' .
//часть строки 6. финалочка
'
ляляля наш текст';
}
return $content;

?>

Аватар пользователя Dec0der Dec0der 2 февраля 2009 в 15:40

ага понятно.
если сниппет возвращает массив ноды. то наверное и тизер можно вывести. Просто для интереса, это какой функцией делается?

Аватар пользователя Dec0der Dec0der 10 февраля 2009 в 10:26

не учли один большой ньюанс. У меня стоит модуль domain. И при выводе нод это должно учитываться. Т.е. ноды принадлежащие одному поддомену (пользователю) не должны отображаться на другом. Когда публикуешь ноду нужно делать выбор поддоменов где нода будет отображаться. В итоге новость отображается на всех поддоменах, где стоит этот сниппет.

Это можно как-то решить?

Аватар пользователя WiseMan WiseMan 10 февраля 2009 в 12:04

Попробуйте в модуле sitemap глянуть как выводяться подшивки. Они при выводе по адресу httр://your-site.ru/sitemap на каждом домене свои получаются, списком

Аватар пользователя HIgor1968 HIgor1968 10 февраля 2009 в 15:28

Имя текущего поддомена - скорее всего является переменной которую можно поднять. Зная ее можно поправить снипет.

Аватар пользователя Dec0der Dec0der 10 февраля 2009 в 16:02

насчёт переменной сказать не могу... А вот то что каждый поддомен имеет ID это точно...
а как можно выяснить на счёт переменной?

Аватар пользователя WiseMan WiseMan 11 февраля 2009 в 0:18

"Dec0der" wrote:
WiseMan, да, выводятся только свои (ноды принадлежащие именно этому домену).

Ну тогда берите эту часть кода из модуля или делайте по аналогии.

Аватар пользователя WiseMan WiseMan 11 февраля 2009 в 13:54

В ближайшие день-два, может больше не смогу вашим вопросом заняться. Может кто-то из ребят здесь вам поможет. Вот код из модуля sitemap, который выводит book:

/**
 * Render books
 */

function _site_map_books() {
  $output = '';
  if (module_exists('book') && ($nids = variable_get('site_map_show_books', array()))) {
    $title = t('Books');
    $description = '<div class="description">'. t("Books at %sn.", array("%sn" => variable_get('site_name', 'Drupal'))) .'</div>';

    $book_menus = array();
    foreach ($nids as $nid) {
      $node = node_load($nid);
      $tree = menu_tree_all_data($node->book['menu_name'], $node->book);
      $data = array_shift($tree);
      $output .= theme('book_title_link', $data['link']);
      $output .= ($data['below']) ? menu_tree_output($data['below']) : '';
    }

    if ($output) {
      $output = theme('site_map_box', $title, $description . $output, 'sitemap-book');
    }
  }

  return $output;
}

Вам надо сделать по аналогии.

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

Только у меня стоит sitemenu, а не sitemap. Это не важно? Или поставить sitemap?

Очень прошу, помогите кто может...!!! Очень нужно. Без этого сниппета вся работа стала.
Просто проект должен родиться приличный! На заглядение!