gte

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

як зрабіць спіс дакументаў тэрміна па алфавіце | [Харзах]-[НЕТ]

Аватар пользователя Sergey1917
Автор: Sergey1917 - чт, 31/01/2008 - 16:12

Уладзімір, дапамажыце калі ласка. Сайт ужо трэба на хост выкладваць, але засталася нявырашаная праблема (невялікая для тых, хто ведае 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>";
?></p>

<p>

Содержание: 

я б прапанаваў скарыстацца модулем Node list, паглядзець у дзеянні можна па гэтым адрасу...

по алфавіту ўсё, ды яшчэ і са спасылкамі напачатку старонкі на літара алфавіту... модуль просты, лёгкі, старонкі высновы кэшуюцца...

Модуль 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;
?>

Может з ім будзе ясней. Але бо я ў РНР наогул нічога не разумею, я не магу скарыстацца гэтым аналогам.

Пробовал звярнуцца да Сетегному, але безвынікова, на Друпал.ру таксама ніхто не адказаў.

Не правяраў, але працаваць павінна

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

?>

Separator@drupal.org ці вы Ўладзімір

Пожалуйста поправте ў папярэднім паведамленні фармат уводу: поставте - code. А то ўшыркі распірае.

Separator@drupal.org, гэта штосьці іншае. Патрэбен жа спіс слоўніка з тэрмінамі, а ўжо ўсярэдзіне гэтага спісу слоўніка, пад кожным тэрмінам - спіс дакументаў. І вось гэты то спіс дакументаў трэба вывесці па алфавіце. Пагледзіце ў самым пачатку.

А у прыведзеным вамі кодзе няма нумара слоўніка, а толькі нумары тэрмінаў. Так што гэта не зусім тое што трэба.

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

так і не зразумеў, што было трэба... вось спіс дакументаў па алфавіце з вызначанага тэрміна: модулі Друпала...

B.X написал:
так і не зразумеў, што было трэба... вось спіс дакументаў па алфавіце з вызначанага тэрміна: модулі Друпала...

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

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

В слоўніку "N2" ~250 тэрмінаў - краіны свету.

Я жадаю зрабіць спіс:
1) аўтараў па літарах алфавіту (самі тэрміны-літары алфавіту і дакументы)
2)аўтараў па краінах (краіны па алфавіце і дакументы ў кожнай краіне па алфавіце)
и іншыя спісы па іншых слоўніках з тэрмінамі, таксама па алфавіце.

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

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

Надеюсь, што зразумела зараз апісаў сваю праблему.

Владимир, а ў прыведзеным вамі прыкладзе, вы чым спіс рабілі?

B.X написал:
прачытайце пра модуль Nodelist падрабязней, там не адзін агульны спіс...
там шмат спісаў можна зрабіць...
вышеприведённый прыклад я рабіў гэтым модулем...

Спасибо я пагляджу ўважлівей.

p.s. У вышэйапісаным мной сниппете - спіс выводзіцца не па нумары nod, а па даце стварэння ці змены nod.

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

Цитата:
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. Я і шукаў "іншыя" і знайшоў сниппеты. Я тады наогул не ведаў Друпал, а гэта фраза ("я думаю, для гэтага патрэбныя іншыя модулі для высновы...") мне ўразалася ў памяць і я нават не спрабаваў з гэтым модулем эксперыментаваць.

Цитата:
і я нават не спрабаваў з гэтым модулем эксперыментаваць

так вышэй я ж сказаў як выводзіць з вызначанага слоўніка дакументы па алфавіце:
> Як мага зрабіць, каб выводзіліся матэрыялы, якія адносяцца
> толькі да тэрмінаў вызначанага мной слоўніка?

taxonomy/term/1/list
и vocabulary/1/list дзе лічба 1 - гэта нумар вашага слоўніка...

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

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

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

Спасибо за ўдзел.

калі вам трэба штосьці сапраўды складанае ў выснове дакументаў з розных слоўнікаў, то вам напэўна сапраўды варта паглядзець у бок Views, бо ўсё астатняе проста не дае неабходнай гнуткасці...

не завошта, пішыце, калі зъявяцца яшчэ нейкія пытанні па наладзе... калі смогу, - адкажу...

Не жадаецца Views. Я неяк спрабаваў з ім разабрацца, там гэтулькі гемороя. А складанага ў мяне нічога ў спісах няма.

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

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

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

Уладзімір, можа каму патрэбен спіс з сартаваннем па алфавіце, тое рашэнне тут: http://www.drupal.ru/node/11620

Сортировка тэрмінаў па алфавіце - дадаўся адзін радок, сартаванне дакументаў па алфавіце - замена пяці радкоў кода.

Приятно было пагутарыць.

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

хех, там таксама можна хутка атрымліваць адказы...
и з вамі таксама было прыемна пагутарыць...