Например вот-этот работает нормально. Но он выводит и тизер. А как без него?
<?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;
?>
HIgor1968, taxonomy_quick_find не совсем для этого предназначен, даже наверное совсем не для этого. Мне нужно вывести блок нод определённого термина, а не блок похожих нод. Тем более он не выводит автора и дату...
<?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)) {
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, похоже. Только меня смущает то что нода возвращается как массив.
и ещё хотелось бы в блоке снизу (именно снизу) вставить пару строчек текста. А так текст не отображается если написать его после сниппета.
Нода по определению массив.
Текст надо писать в строку после 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;
Лучше даже echo - быстрее будет.
return вернул результат и покинул блок.
а print или echo печатает и дальше выполняет блок.
Номер кошелька почтой послал (на пиво за твое здоровье:))
Меняем как предложил olk. Только добавив всплывающую подсказку
<?php
//часть строки 1. заголовок текста короче конечно написать как указал olk с помощью l()
//но не вижу смыславызова функции когда есть готовый URL
$opt['attributes']['title'] = $nnn->title;
l($nnn->title,"node/$nnn->nid", $opt) .
?>
$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;
не учли один большой ньюанс. У меня стоит модуль domain. И при выводе нод это должно учитываться. Т.е. ноды принадлежащие одному поддомену (пользователю) не должны отображаться на другом. Когда публикуешь ноду нужно делать выбор поддоменов где нода будет отображаться. В итоге новость отображается на всех поддоменах, где стоит этот сниппет.
Попробуйте в модуле sitemap глянуть как выводяться подшивки. Они при выводе по адресу httр://your-site.ru/sitemap на каждом домене свои получаются, списком
В ближайшие день-два, может больше не смогу вашим вопросом заняться. Может кто-то из ребят здесь вам поможет. Вот код из модуля sitemap, который выводит book:
Комментарии
вот тут поищите: setegnom.com/drupal/snippets
нет там для 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;
?>
http://drupal.ru/node/22216
HIgor1968, taxonomy_quick_find не совсем для этого предназначен, даже наверное совсем не для этого. Мне нужно вывести блок нод определённого термина, а не блок похожих нод. Тем более он не выводит автора и дату...
Все можно сделать поправив код ВАШЕГО снипета.
Возвращает ноду как массив. посмотрите его с помощью print_r
И соответственно в $content пополняйте нужными ВАМ полями.
Наименование материала и автор например.
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 '
';
}
return $content;
?>
так получается просто текст...
Название должно быть ссылкой, автор тоже... Всё как обычно должно быть...
Одно из 2-х вре равно прийдется изучить:
Используйте виды
ставить виды только для этого... нет!
всё это решается сиппетом! кто знает такой сниппет???
изучать рнр нет времени. кто поможет? если бесплатно не судьба то называйте цену.
<?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 '
';
}
return $content;
?>
Так?
<?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);
}
?>
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, похоже. Только меня смущает то что нода возвращается как массив.
и ещё хотелось бы в блоке снизу (именно снизу) вставить пару строчек текста. А так текст не отображается если написать его после сниппета.
Нода по определению массив.
Текст надо писать в строку после 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;
?>
в списке не одна нода. и получается, что текст "ляляля наш текст" выводится после каждой ноды...
А нужно внизу блока (после списка нод).
тогда
вот! HIgor1968, спасибо!
Жаль, что несколько таких сниппетов один блок не запихнёшь...
Почему?
Напиши вместо return - ptint и вперед.
бесподобно!
только не ptint, а print наверное...
А чем эта команда отличается от return?
Лучше даже echo - быстрее будет.
return вернул результат и покинул блок.
а print или echo печатает и дальше выполняет блок.
Номер кошелька почтой послал (на пиво за твое здоровье:))
Echo - что дали - то
поюпишуprint - форматный вывод, можно параметры строке передавать соответственно печатает медленнее.
ок!
кошелёк словил
Ошибочка где-то...
Ссылка на ноду ведёт на главную страницу, а не на тело ноды...
Тогда
<?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) .
?>
Пардон
Строку
Поставь сразу после
Окончательный код
<?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;
?>
ага понятно.
если сниппет возвращает массив ноды. то наверное и тизер можно вывести. Просто для интереса, это какой функцией делается?
$nnn->teaser
не учли один большой ньюанс. У меня стоит модуль domain. И при выводе нод это должно учитываться. Т.е. ноды принадлежащие одному поддомену (пользователю) не должны отображаться на другом. Когда публикуешь ноду нужно делать выбор поддоменов где нода будет отображаться. В итоге новость отображается на всех поддоменах, где стоит этот сниппет.
Это можно как-то решить?
Попробуйте в модуле sitemap глянуть как выводяться подшивки. Они при выводе по адресу httр://your-site.ru/sitemap на каждом домене свои получаются, списком
WiseMan, да, выводятся только свои (ноды принадлежащие именно этому домену).
Имя текущего поддомена - скорее всего является переменной которую можно поднять. Зная ее можно поправить снипет.
насчёт переменной сказать не могу... А вот то что каждый поддомен имеет ID это точно...
а как можно выяснить на счёт переменной?
Ну тогда берите эту часть кода из модуля или делайте по аналогии.
я рнр не знаю. был бы очень благодарен за помощь!
Называйте цену!
В ближайшие день-два, может больше не смогу вашим вопросом заняться. Может кто-то из ребят здесь вам поможет. Вот код из модуля 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;
}
Вам надо сделать по аналогии.
Только у меня стоит sitemenu, а не sitemap. Это не важно? Или поставить sitemap?
Очень прошу, помогите кто может...!!! Очень нужно. Без этого сниппета вся работа стала.
Просто проект должен родиться приличный! На заглядение!
вопрос ещё актуален!