Аватар пользователя B.X

Nemo altero fragilior...

Nemo altero fragilior est: nemo in crastinum sui certior. — Всякий человек столь же хрупок, как все прочие; всякий одинаково не уверен в завтрашнем дне.

Top.Mail.Ru Каталог webplus.info Яндекс.Метрика

Пользователей онлайн: 0.

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

как сделать список документов термина по алфавиту | [Харзах]-[РУ]

Аватар пользователя Sergey1917

Владимир, помогите пожалуйста. Сайт уже надо на хост выкладывать, но осталась нерешенная проблема (небольшая для тех, кто знает PHP).
Есть сниппет: "Список терминов определённого словаря (с иерархией) + количество документов" - как сделать список документов термина по алфавиту. Views не предлагать.

Вот сам сниппет:

<?php
$vid 
3;  // Номер словаря
$pole = array();
$items = array();
$terms taxonomy_get_tree($vid);
foreach ( 
$terms as $term ) {
  
$count db_result(db_query("SELECT COUNT(nid) FROM {term_node} WHERE tid = %d"$term->tid));
  
$pole[]=Array (l($term->name"taxonomy/term/$term->tid") . " ($count)"$term->depth$count$term->tid)  ;
}
  
$depth =-1;
  foreach (
$pole as $list) {
    if (
$list[1] > $depth) echo "\n<ul>";
    if (
$list[1] < $depth) echo "\n</li>\n</ul>\n</li>";
    if (
$list[1] == $depth) echo "</li>";
    
$poc++;
    echo 
"\n<li>$list[0]";
if (
$list[2]>0) {
      echo 
"\n<ul>";
      
$result db_query("SELECT * FROM {term_node} WHERE tid=$list[3]");
      while(
$zaznam db_fetch_array($result)) {
        
$node db_result(db_query("SELECT title FROM {node} WHERE nid=$zaznam[nid]"));
        
$node_link l($node"node/$zaznam[nid]");
        echo 
"\n<li>$node_link</li>";
      }
      echo 
"\n</ul>";
  }
    
$depth=$list[1];
}
echo 
"</li>\n</ul>";
?>
Аватар пользователя B.X

я бы предложил воспользоваться модулём Node list, посмотреть в действии можно по этому адресу...

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

Аватар пользователя Sergey1917

Модуль Node list я уже использую, по вашему же совету. Но у меня много списков самых разных. А этот модуль поддерживает только один. Сниппет выводит список наподобие. Термины выводятся по алфавиту (или по порядку создания, в данном случае для меня это одно и то же) а документы нет.

Есть другой сниппет, Список документов определённого термина. Сетегном помог его сделать по алфавиту, вот уже готовый код:

ORDER BY node.title ASC — упорядочивание по названию документа А-Я. Таблица node, колонка title.

<?php $taxo_id = 5; // номер термина $list_no =10; // количество документов в списке $sql = "SELECT node.title, node.nid FROM node INNER JOIN term_node ON node.nid = term_node.nid WHERE term_node.tid = $taxo_id ORDER BY node.title ASC LIMIT $list_no"; $output .= "<ul>"; $result = db_query($sql); while ($anode = db_fetch_object($result)) { $output .= "<li>".l($anode->title, "node/$anode->nid")."</li>"; } $output .= "</ul>"; print $output; ?>

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

Пробовал обратиться к Сетегному, но безрезультатно, на Друпал.ру тоже никто не ответил.

Аватар пользователя Separator@drupal.org

Не проверял, но работать должно

<?php $taxo_id_arr = array(2,3); // Номера терминов $taxo_id = join($taxo_id_arr, ','); $list_no = 100; // Количество документов в списке $query = "SELECT DISTINCT(n.nid), n.title, n.created FROM {node} n INNER JOIN {term_node} tn ON n.nid = tn.nid WHERE tn.tid in ($taxo_id) AND n.status = 1 ORDER BY n.created DESC LIMIT $list_no"; $sql = db_rewrite_sql($query); $result = db_query($sql); $items = array(); while ($anode = db_fetch_object($result)) { $term_names = array(); # gather, into $term_names, all the terms because of which this node was selected: foreach (taxonomy_node_get_terms($anode->nid) as $term) { if (in_array($term->tid, $taxo_id_arr)) $term_names[] = $term->name; } $items[]= l($anode->title, "node/$anode->nid") . '<br /> (Category/ies: ' . join($term_names, ', ') . ' - date added ' . format_date($anode->created, 'custom', 'd-m-Y') . ')'; } if(count($items)) { return theme('item_list',$items); } ?>
Аватар пользователя Sergey1917

Separator@drupal.org или вы Владимир

Пожалуйста поправте в предыдущем сообщении формат ввода: поставте - code. А то вширь распирает.

Separator@drupal.org, это что-то другое. Нужен же список словаря с терминами, а уже внутри этого списка словаря, под каждым термином - список документов. И вот этот то список документов нужно вывести по алфавиту. Посмотрите в самом начале.

А в приведенном вами коде нет номера словаря, а только номера терминов. Так что это не совсем то что нужно.

Аватар пользователя B.X

Модуль Node list я уже использую, по вашему же совету. Но у меня много списков самых разных. А этот модуль поддерживает только один. Сниппет выводит список наподобие. Термины выводятся по алфавиту (или по порядку создания, в данном случае для меня это одно и то же) а документы нет.

так и не понял, что было нужно... вот список документов по алфавиту из определённого термина: модули Друпала...

Аватар пользователя Sergey1917

так и не понял, что было нужно... вот список документов по алфавиту из определённого термина: модули Друпала...

Проблема в том, что этот модуль у меня работает, но он может выдать только один список (да, его можно настроить, но только один). У меня списков на сайте будет несколько самых разных. Тот сниппет, который я просил исправить, выводит список терминов какого либо словаря и под каждым термином список документов с ним связанных. Но он выводит список самих терминов и список документов каждого термина не по алфавиту, а по номеру создания их на сайте, что некрасиво выглядит.

Например, у меня в словаре "N1" 29 терминов - 29 букв алфавита. На каждый термин есть документы, их число будет увеличиваться без конца.

В словаре "N2" ~250 терминов - страны мира.

Я хочу сделать список:
1) авторов по буквам алфавита (сами термины-буквы алфавита и документы)
2)авторов по странам (страны по алфавиту и документы в каждой стране по алфавиту)
и другие списки по другим словарям с терминами, тоже по алфавиту.

Для этого я использую сниппеты. А модулем я не могу даже два списка сделать.

Повторю свою просьбу: в сниппете, код которого приведен в самом верху топика, список и терминов и документов терминов выводится по номеру nod. Как переделать код, чтобы и термины и документы этих терминов выводились по алфавиту. Ниже верхнего (в топике) кода сниппета я привел для сравнения другой сниппет, где документы выводятся по алфавиту (чтобы легче было первый исправить).

Надеюсь, что понятно теперь описал свою проблему.

Владимир, а в приведенном вами примере, вы чем список делали?

Аватар пользователя B.X

прочитайте про модуль Nodelist подробнее, там не один общий список...
там много списков можно сделать...
вышеприведённый пример я делал этим модулем...

Аватар пользователя Sergey1917

прочитайте про модуль Nodelist подробнее, там не один общий список...
там много списков можно сделать...
вышеприведённый пример я делал этим модулем...

Спасибо я посмотрю повнимательнее.

p.s. В вышеописанном мной сниппете - список выводится не по номеру nod, а по дате создания или изменения nod.

Владимир, вы не специалист по РНР, но немного (из ваших слов) в нем разбираетесь. Неужели такая проблема сделать сортировку документов и терминов не по дате, а по алфавиту?

Аватар пользователя B.X

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

Аватар пользователя Sergey1917

Date: 10.07.2007 22:46

Здравствуйте, Сергей.

> Если сможете, то пожалуйста объясните его настройки:

> 1. "Page title for nodes in a vocabulary: *",
> по умолчанию стоит - Content list for for %id

Это оформление заголовка документов... а именно букв А Б и тд.

> 2. "Page title for nodes in a taxonomy term: *",
> по умолчанию стоит - Content list for %id

Тоже самое, только для словарей таксономии...

> 3. Опция "Include node children when using therm hierarchy".

Спрашивает вас, включить ли например, дочерние словари при применении
иерархии в словарях (например, если будете использовать подфорумы и тд.)

> 4. "Node types to include:" - здесь перечисляются все, доступные для
> модуля виды материалов, или это выбор только одного, конкретного? А
> если нужно выбрать два или три вида, тогда как быть? У меня еще почти
> нет введенного материала чтобы определить опытным путем. Например, я
> еще графику не вводил, галереи. До них еще очередь не дошла.

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

> Как можно сделать, чтобы выводились материалы, относящиеся
> только к терминам определенного мной словаря?

taxonomy/term/1/list
и vocabulary/1/list где цифра 1 - это номер вашего словаря...

> А если мне нужно на одной странице выводить списки документов по одному словарю, а на
> другой или других списки документов по другим словарям? Возможно ли это?

я думаю, для этого нужны сторонние модули для вывода...

Владимир, это цитата из вашего письма по модулю Node list. Я и искал "сторонние" и нашел сниппеты. Я тогда вообще не знал Друпал, а эта фраза ("я думаю, для этого нужны сторонние модули для вывода...") мне врезалась в память и я даже не пытался с этим модулем экспериментировать.

Аватар пользователя B.X

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

так выше я же сказал как выводить из определённого словаря документы по алфавиту:
> Как можно сделать, чтобы выводились материалы, относящиеся
> только к терминам определенного мной словаря?

taxonomy/term/1/list
и vocabulary/1/list где цифра 1 - это номер вашего словаря...

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

Аватар пользователя Sergey1917

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

Получается очень красивый и удобный список, но только для одного словаря. А для других придется все-таки приспосабливать сниппеты.

Спасибо за участие.

Аватар пользователя B.X

если вам нужно что-то действительно сложное в выводе документов из разных словарей, то вам наверное действительно стоит посмотреть в сторону Views, так как всё остальное просто не даёт необходимой гибкости...

не за что, пишите, если появятся ещё какие-то вопросы по настройке... если смогу, - отвечу...

Аватар пользователя Sergey1917

Не хочется Views. Я как-то пытался с ним разобраться, там столько гемороя. А сложного у меня ничего в списках нет.

Через сниппет "Список документов определённого термина" список тоже выводился не по алфавиту. Изменение в коде уместилось на одной (небольшой) строке. Думаю, что в сниппете "Список терминов определённого словаря (с иерархией) + количество документов" изменение в коде займет две такие строки кода. Т.е. специалисту на это понадобится максимум 1 минута. Просто профессионалы не обращают внимание на вопросы новичков, за редкими исключениями.

Аватар пользователя B.X

зато Views позволяет любым людям, которые освоились с модулем выводить материал в любом виде... всё сниппетами не решить, так как сейчас вам надо вывод по авторам, потом что-то другое... лучше использовать комплексное решение и знать PHP там не нужно вообще, зная Views вы будете независимы от кого-бы то ни было...

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

Аватар пользователя Sergey1917

Владимир, может кому нужен список с сортировкой по алфавиту, то решение здесь: http://www.drupal.ru/node/11620

Сортировка терминов по алфавиту - добавилась одна строка, сортировка документов по алфавиту - замена пяти строк кода.

Приятно было пообщаться.

Аватар пользователя B.X

да, те, кто знают php в конце концов и решили данную задачу...
так что, зря вы так о Друпал.Ру...

хех, там тоже можно быстро получать ответы...
и с вами тоже было приятно пообщаться...