A drupal alapu oldalamon van egy block amely az aktiv forumtemakat jeleniti meg. Mukodik jol csak szeretnek egy kis modositast, pontosabban igy szeretnem kilistazni az adatokat:
+ Aktiv forumtemak + Konyvtar torlese (1 new) Problemamentes szerver-szolgaltatok (2 new) Drupal 6 problema (1 new)
Persze az adatokat csak a regisztralt felhasznalo kene lasa, es ha lehet a $topic->num_comments valtozobol kene kiszedni oket.
Akartam regen is ilyesmit csinalni csak sajnos nem akartam belenyulni a CORE-ba. Most, hogy letezik a drupal 6 preprocess gondolom konyebben megoldhato!
Most fogalmam sincs melyik fajlot kene szerkezteni. A modules/forum/forum.module fajlba a kovetkezo lathato:
/** * Implementation of hook_block(). * * Generates a block containing the currently active forum topics and the * most recently added forum topics. */ function forum_block($op = 'list', $delta = 0, $edit = array()) { switch ($op) { case 'list': $blocks[0]['info'] = t('Active forum topics'); $blocks[1]['info'] = t('New forum topics'); return $blocks; case 'configure': $form['forum_block_num_'. $delta] = array('#type' => 'select', '#title' => t('Number of topics'), '#default_value' => variable_get('forum_block_num_'. $delta, '5'), '#options' => drupal_map_assoc(array(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20))); return $form; case 'save': variable_set('forum_block_num_'. $delta, $edit['forum_block_num_'. $delta]); break; case 'view': if (user_access('access content')) { switch ($delta) { case 0: $title = t('Active forum topics'); $sql = db_rewrite_sql("SELECT n.nid, n.title, l.comment_count, l.last_comment_timestamp FROM {node} n INNER JOIN {term_node} tn ON tn.vid = n.vid INNER JOIN {term_data} td ON td.tid = tn.tid INNER JOIN {node_comment_statistics} l ON n.nid = l.nid WHERE n.status = 1 AND td.vid = %d ORDER BY l.last_comment_timestamp DESC"); $result = db_query_range($sql, variable_get('forum_nav_vocabulary', ''), 0, variable_get('forum_block_num_0', '5')); $content = node_title_list($result); break; case 1: $title = t('New forum topics'); $sql = db_rewrite_sql("SELECT n.nid, n.title, l.comment_count FROM {node} n INNER JOIN {term_node} tn ON tn.vid = n.vid INNER JOIN {term_data} td ON td.tid = tn.tid INNER JOIN {node_comment_statistics} l ON n.nid = l.nid WHERE n.status = 1 AND td.vid = %d ORDER BY n.nid DESC"); $result = db_query_range($sql, variable_get('forum_nav_vocabulary', ''), 0, variable_get('forum_block_num_1', '5')); $content = node_title_list($result); break; }
Engemet valoszinuleg a CASE 1 erdekel, mert az kezeli az adatok kilistazasat. Ugy veszem eszre, hogy az adatok a $result es a $content valtozokba kerulnek.
Nos ezek utan mit kene csinalni ? Letezik egy specialis preprocess fuggveny ami felhasznalhato szamomra ? Elnezest a buta kerdesekert de tenyleg elakadtam!
Orulnek par otletnek. Koszonom!
Kibogoztam, hogy a kovetkezo
Kibogoztam, hogy a kovetkezo fuggveny listaza az adatokat:
Ha kicserelem az $items[] valtozo tartalmat igy:
Itt gondolom a $topic->num_comments nem egyezik, mert nem helyes az SQL lekeres, ugye ? Hat akkor elege bonyorult a dolog ? Letre kell hozak egy kulon SQL lekerest ?
Esetleg meg tudnatok mondani,
Esetleg meg tudnatok mondani, hogy kell modositani a "node_title_list" fuggvenyt anelkul, hogy a CORE-ba irjak valamit?
bonyolult
$topic->num_comments?? ezt honnan vetted. semmi ilyesmi valtozot nem latok meg a kozelben sem.. attol, hogy valamit hasrautes szeruen beleirsz a kodba attol meg nem fog ugy mukodni ahogy elkepzeled..
igen, ezt sajat SQL lekerdezessel meg tudod oldani. az 'Active forum topics'-ban nincs semmi ami megmondana, hogy mennyi az uj hozzaszolas, es nincs ra egyszeru modszer, hogy ezt az informaciot hozzaadd..
jo de legalabb akkor a
jo de legalabb akkor a commentek szamat kene kinyomni, amit a title tag mar tartalmaz! (a regi weblaboron mukodott igy).
csak azt nem tudom, hogy lehet megoldani CORE modositas nelkul. Valahogy a "node_title_list" fuggvenyhez kene ferni. preprocess, phptemplate?
kiolvasni a tooltip-et
azt hiszem a devel modulban levo theme developer pontosan megmondana, hogy milyen sminkeleseket alkalmazhatsz az adott elemre (blokkra, listara)..
a template.php-ban keszits egy sminknev_node_list($items) fuggvenyt ahol az $items tombben a linkek vannak ilyen formaban:
sajnos a title es a href nincs kulon valtozoban ezert ezt mar csak php-s string muveletekkel tudod modositani az altalad kivant formara..
Ezt szeretnem
Ezt szeretnem hasznalni:
A lenyeg szerintem benne van, de nem szeretnek a CORE-ba belenyulni! Es ha igy irom be a phptemplate.php fajlba nem mukodik: sminknev_node_list($items)
Egyebkent itt node_title_list-rol van szo.
Kicsit összekevered a dolgokat...
Szia.
Kicsit összekevered a dolgokat... Először is a template.php fájlba kell beírnod, ahogy Pasqualle is írta és a sminknev_node_list($items) függvényt kell használnod. A paraméterként átadott $items egy tömb, tehát valamilyen ciklussal végig kell menned az elemein valahogy így:
A $topic->num_comments változó én sem értem, hogy került a képbe, esetleg van olyan ezzel kapcsolatos kód, amit nem másoltál be?
A cache-t is célszerű lehet törölni a kód módosításakor.
Üdv: Zoli
Ok, koszonom megprobalom!
Ok, koszonom megprobalom!
views?
én lehet, hogy inkább views-zal bohóckodnék...az eredetit kikapcsolnám, létrehoznék egy másikat, annak meg azt mondok amit csak akarok...
Igen csak olyan sok modulom
Igen csak olyan sok modulom van bekapcsolva, hogy ha lehet nem terhelnem feleslegesen az oldalt. Peldaul ilyen apro modositasokert inkabb template fajlba raknam.
Megprobaltam
Megprobaltam a sajat eszem szerint megirni:
Az a gond, hogy a $node->comment_count nem erheto el es ez logikus, mert nem csinalok SQL lekerest, a tombot megkapom keszen.
Az a problema, hogy az adatot nem tudom kihalaszni, a print_r($items) csak a tombok nevet listaza abbol pedig nem latom a hozaszolasok szamat.
igy
a kodot nem probaltam ki. a sok strpos-t helyettesiteni lehet preg_replace() fuggvennyel..
Koszonom szepen! Az adatokat
Koszonom szepen! Az adatokat a HTML title-bol szedi ki ?
igen
igen
Az a baj, hogy egyes temaknal
Az a baj, hogy egyes temaknal nincs TITLE tag, peldaul azoknal amelyeknel nincs valasz. Ilyen helyzetben (0)-at kell megjelenite csak nem tudom hogyan :)
igy
Koszonom mukodik! Egyebkent
Koszonom mukodik! Egyebkent ha valaki szeretne hasznalni a kodot, meg kell emlitenem, hogy az IF hibas.
A hibas resz:
Ki kell cserelni igy:
Most azon dolgozok, hogy az "(1 comment)" helyet csak ezt irja ki -> (1).
Esetleg tudnal adni egy otletet a sok PHP fuggveny kozul melyik a legalkalmasabb, hogy levagjam a "comment" szoveget a $comment_count valtozobol?
Ha jol emlekszem a regex elege lassu ilyesmire, talan jobb mast hasznalni.
(int) typcast
persze csak akkor működik, ha nincs zárójel, ha van akkor meg
Palócz István
https://palocz.hu | https://tanarurkerem.hu
Vagy esetlegy $comment_count[0] ?
Igy mukodik de az a $comment_count[0] reszt talalomra nyomtam be, remelem nem okoz gondokat!
preg_replace furcsa modon nem akart mukodni
Az (int) typecast valtozat is
Az (int) typecast valtozat is mukodne:
De sajnos meg nem vagyok olyan szinten, hogy megmondjam ha jo ezt hasznalni, biztonsagi es minosegi szempontbol. A minosegi szempont az, hogy ne legyen problemam es hibas adatokat listazon kesobb! Elnezest, hogy ilyen "szor szal hasogato" vagyok, csak szeretnem ha mukodne rendesen :)
igy
Remelem nem koveztek meg, nem
Remelem nem koveztek meg, nem kerek kodot, csak egy "utolso" tanacsra van szuksegem :)
Azt szeretnem ha valaki raklikel a szarojeles szamra akkor nyisa meg a temat. Most a kovetkezot tudnam csinalni:
$linkpos = strpos($anchor, 'href');
Megkapom a linket es azt is kiiratom valahogy igy
<a href="/node/4">(5)</a>
Vagy esetleg van jobb otlet a megoldashoz?
Ha jól értettem, akkor így
Ha jól értettem, akkor így szeretnéd?
Üdv: Zoli
lol
na most vetted el a programozoi kedvét :)
a kod jonak tunik..
kemeny ez a kod :) egyebkent
kemeny ez a kod :) mukodik!
egyebkent koszi mindenkinek!