Alapértelmezett theme funkciók felülírása

taltos képe

Eszméletlen mennyit írok már ide a gondjaimmal, de szerencsére mindig kapok segítséget, és tovább tudok lépni az új területekre. :)

Most éppen újfajta .tpl.php file-t akarok hozzáadni a PHPTemplate sminkemhez, amihez meg is találtam az utasításokat itt magyarul és itt angolul. Nagyon nem is akarom magyarázni, hogy mit kéne csinálnom és kapnom végeredményül, mert az szerintem ott egyértelműen le van írva. Inkább elmondom mit akarok, csináltam és hogy mit kaptam eredményül.

A következő dolgokat akarom saját magam befolyásolni:

  • Ha oldalt rákeresek ey szövegre a sidebar-on lévő keresés mezőben, akkor az annak kapcsán megjelent "oldalt" a saját struktúrám szerinti megjelenésbe szeretném önteni. (Ehhez majd a theme_search_page és a theme_search_item -et kell manipulálgatni azt hiszem.)
  • Ha egy story kategóriánál rákattintok egy kategóriára, akkor az behozza, hogy abban a kategóriában milyen írások vannak. (Hát ehhez így nagy hirtelenjében nem tudom melyikekhez kell majd nyúlnom, de gondolom innen kell majd választanom.)
  • Nagyjából ez a kettő van csak, az utolsó még talán az lenne, hogy azt szeretném, hogy a cikkek alatt a hozzászólások külön oldalon jelenjenek meg. Csak ennyi lenne. A formázás és hasonló dolgok ugyanolyanok lennének, mint ha a cikk alatt lennének, csak a cikk alatt egy link lenne a hozzászólásokra (a hozzászólások tetejéről meg egy link a cikkre). Na azt nem tudom, hogy ez ugyenez a téma-e, amiben most kérek segítséget. Ez az? Vagy ez nem sminkkérdés?

No ezek volnának a tervek, és mondom hogy csináltam. A search page-el kezdtem. Létrehoztam egy teljesen üres template.php file-t a sminkem könyvtárában, és ezt írtam bele:

<?php
function phptemplate_search_page($results, $type) {
  return _phptemplate_callback('search_page',
    array('results' => $results, 'type' => $type));
}
?>

Ez elvileg tök egyszerű, ráadásul szinte másoltam, csak pár helyen kellett átírni. Ezután létrehoztam a search_page.tpl.php file-t szintén a könyvtáramban, és beleírtam, hogy ...

  • valami
  • belemásoltam az eredeti függvény törzsét
  • egy csomó más dolog

de sehgysem jó. A hatás minden esetben ugyanaz: az oldal nem jelenik meg, csak egy üres fehér oldal. Ha a template.php file tartalmát kitörlöm, akkor minden jó.

Elvileg teljesen úgy csinálom, ahogy a leírás (mind az angol, mint a magyar) mutatja, mégsem jó. Mit szúrok el?

(5.1-es drupal-t használok, a PHPTemplate-em az alapértelmezett, ami benne volt az 5.1-es drupalban.)

Fórum: 
Paal képe

Ha egy story kategóriánál rákattintok egy kategóriára, akkor az behozza, hogy abban a kategóriában milyen írások vannak. (Hát ehhez így nagy hirtelenjében nem tudom melyikekhez kell majd nyúlnom, de gondolom innen kell majd választanom.)

Erre gondoltál?

<?php if ($taxonomy): ?><div class="post-cat"><?php print $terms ?></div><?php endif;?><

A node.tpl.php-ba, a neked megfelelő helyre kell beszúrni.

Üdv, Pali

0
0

--
Palócz Paal Pál, a drupal.hu admin csoportjának tagja
Ajánlott olvasmány: Eric Steven Raymond - Hogyan kérdezzünk okosan

taltos képe

Nem erre gondoltam, ez természetesen be van szúrva a megfelelő helyre. A probléma azért jött elő (nem is probléma, mert így is akartam), mert kiszedtem a page.tpl.php-ból $title részt, és a node.tpl.php-ba illesztettem bele, mert a $title elé én még akartam rakni a noderól információt, amit úgy elvileg nem tudtam, hogyha a $title-t a page.tpl.php-ban hagyom.

Emiatt a keresésnél és más oldalon (pl. ha egy term -re rákattintok, és kilistázza a benne lévő cikkeket) nincs $title, hoszen az csak a node.tpl-php-ban, és a többi node-story.tpl.php és node-page.tpl.php-ban van, a fenti esetekben pedig ezek nem hívódnak meg.

Ezért akartam külön az ezekhez kapcsolódó fügyvényt külön formázni, és beleírni a $title-t, és átalakítani, ahogy nekem jó. :)

0
0
Illyés Edit képe

Egy topikba egy kérdést, ha lehet.

és beleírtam, hogy ...

  • valami
  • belemásoltam az eredeti függvény törzsét
  • egy csomó más dolog

de sehgysem jó. A hatás minden esetben ugyanaz: az oldal nem jelenik meg, csak egy üres fehér oldal.

"Beírtam még valamit, meg egy csomó más dolgot, de sehogy se jó. Lécci segítsetek!"

Ez most komoly? Mi az a "valami"? Mi az a "csomó más dolog"? Titkos? Honnan kéne nekem ezeket tudni?

0
0
taltos képe

Ebben a topikba egy kérdés van, mégpedig az, amire a topic címe utal: hogyan lehet egy másik theme függvényt felülírni egy saját .tpl.php fájllal? Ennek kapcsán mondtam, hogy mi miatt kell nekem ez, hogy hol találtam róla dokumentációt ami alapján megpróbáltam megcsinálni, hogy mit is csináltam konkrétan az egyik esetben, és hogy mi lett a végeredmény.

Amit idéztél, az arra utalt, hogy gondoltam a search_page.tpl.php file kb. ugyanúgy épül fel, mint az összes többi .tpl.php file, szóval amit beleírok, egyszerűen visszadja majd a drupal, és egyszerű php részekkel szabhatom dinamikusra. Mivel nekem alapvetően ennek a file-nak a munkába állítása sem történt meg, így nem nagyon tudtam normálisan kidolgozni, hogy mit is adjon majd vissza, tehát mint egy teszt szerűren beírtam, hogy "valami". Valami, mint egy string... :) Ha meghívódik, akkor egyszerűen ezt kellene visszaadnia. De gondoltam hátha ez másképpen épül fel, ezért bemásoltam az eredeti függvény törzsét (magam sem hittem, hogy ez kell, de megpróbáltam). Így sem ment. Ezután próbálgattam más dolgokat is, de mint írtam a végén, ha a template.php file tartalmát kitöröltem, akkor megjavult az oldal, magyarán elég nagy esélyel teljesen mindegy mit írok a search_page.tpl.php -ba, idáig meghívatni sem sikerült, mert azt hogy "valami" sehova nem írta ki, hanem az oldal egyszerűen lezárt, és egy teljesen fehér üres böngészőablak jelent meg (header, sidebarok és footer nélkül.

Magyarán csak azért írtam ennyit, hogy lássátok, hogy elvileg utánanéztem, dolgoztam vele, és nem ment. Ha most kihagyom, hogy mit csináltam én, akkor belinkelitek azt a 3 oldalt, amit én is belinkeltem, erre én válaszolok, hogy ezt megpróbáltam, de nem megy, erre megkérdezitek mit csináltam és mit írt ki, és... szóval ezt megkerülve ezeket leírtam, és egyszerűen a kérdést feltéve:

TI hogy éritek / érnétek el, hogy egy új .tpl.php file-al formázni tudjátok a keresés kimenetét.

:)

0
0
Illyés Edit képe

tehát mint egy teszt szerűren beírtam, hogy "valami". Valami, mint egy string... :)

Hát erre tényleg nem gondoltam.

TI hogy éritek / érnétek el, hogy egy új .tpl.php file-al formázni tudjátok a keresés kimenetét.

Template.php-be:

<?php
function phptemplate_search_page($results, $type) {
  return _phptemplate_callback('search_page',
    array('results' => $results, 'type' => $type));
}
?>

search_page.tpl.php-be:

<h1>OK, ez rendben.</h1>

Ha ezek után bármire rákeresel, akkor a találati lista helyett az "OK, ez rendben." szöveget fogod látni.

Ha ez működik, akkor a search_page.tpl.php-ben elkezdhetsz variálni az átadott $results és $type változókkal, azaz becsomagolod őket a kívánt HTML címkék közé.

<dl class="az-en-keresesi-eredmenyeim">
<?php
...Itt kiíratod a változók értékét...
?>
</dl>

Ha üres oldalt kapsz, akkor hibás a search_page.tpl.php, ez lehet logikai hiba és szintaktikai hiba egyaránt. Lépésenként haladj egy egyszerű példától kezdve (OK, ez rendben), és akkor látod, hol hasal el.

Mondjuk nem sok értelmét látom itt külön template-ek használatának, egyszerűen bemásolod a theme_search_page() és a theme_search_item() függvényeket a template.php-be, átnevezed őket phptemplate_search_page()-re és phptemplate_seach_item()-re és felülírod őket. Persze ez ízlés kérdése, én inkább egy helyen, a template.php-ben tartok amit csak lehet.

0
0
taltos képe

Kimásoltam a commentedből a forrást (a template.php és a search_page.tpl.php), de a hiba ugyanaz volt, ami nálam is. teljesen fehér oldal. (ezt nem tudom hogy leírni most hirtelenjében. Nem a középső sidebarok mellett elhelyezkedő rész volt üres oldal, hanem az egész oldal üres. Egy www.valami.hu oldalra egy teljesen fehér oldalt ad) Dehát végülis én is ezt csináltam, a template.php-ban nekem teljesen ugyanez volt, amit te írtál, a search_page.tpl.php -ban pedig egy "valami" string a "OK, ez rendben." string helyett.

De persze nem ragaszkodok a külön file-os megoldáshoz, csupán a függvényfelülírás módját szeretném elsajátítani. Szóval megcsináltam azt, amit a kommented második felében írtál, aminek az lett az eredménye, hogy a drupal főoldalán ez jön be:

function phptemplate_search_item($item, $type) { 
??$output = ' <dt class="title"><a href="'. check_url($item['link']) .'">'. check_plain($item['title']) .'</a></dt>'; 
??$info = array(); 
??if ($item['type']) { 
????$info[] = $item['type']; 
??} 
??if ($item['user']) { 
????$info[] = $item['user']; 
??} 
??if ($item['date']) { 
????$info[] = format_date($item['date'], 'small'); 
??} 
??if (is_array($item['extra'])) { 
????$info = array_merge($info, $item['extra']); 
??} 
??$output .= ' <dd>'. ($item['snippet'] ? '<p>'. $item['snippet'] .'</p>' : '') .'<p class="search-info">'. implode(' - ', $info) .'</p></dd>'; 
??return $output; 
}
 
function phptemplate_search_page($results, $type) { 
??$output = '<dl class="search-results">'; 
 
??foreach ($results as $entry) { 
????$output .= theme('search_item', $entry, $type); 
??} 
??$output .= '</dl>'; 
??$output .= theme('pager', NULL, 10, 0); 
 
??return $output; 
}
...

és természetesen innen folytatódik a jó oldal a DOCTYPE-okkal és egyebekkel(ez most a forrás volt természetesen), valamint ha a keresőmezőbe írok valamit és entert nyomok, akkor:

function phptemplate_search_item($item, $type) { 
??$output = ' <dt class="title"><a href="'. check_url($item['link']) .'">'. check_plain($item['title']) .'</a></dt>'; 
??$info = array(); 
??if ($item['type']) { 
????$info[] = $item['type']; 
??} 
??if ($item['user']) { 
????$info[] = $item['user']; 
??} 
??if ($item['date']) { 
????$info[] = format_date($item['date'], 'small'); 
??} 
??if (is_array($item['extra'])) { 
????$info = array_merge($info, $item['extra']); 
??} 
??$output .= ' <dd>'. ($item['snippet'] ? '<p>'. $item['snippet'] .'</p>' : '') .'<p class="search-info">'. implode(' - ', $info) .'</p></dd>'; 
??return $output; 
}
 
function phptemplate_search_page($results, $type) { 
??$output = '<dl class="search-results">'; 
 
??foreach ($results as $entry) { 
????$output .= theme('search_item', $entry, $type); 
??} 
??$output .= '</dl>'; 
??$output .= theme('pager', NULL, 10, 0); 
 
??return $output; 
} 

Ez forrás is volt egyben, és a kimenet is. (mármint ami a böngészőben megjelenik.)

Nekem első látásra úgy tűnik, mintha nem futtatná le a függvényeket, hanem bemásolja csak simán a forrásba?

Lehet hogy ez buta kérdés, de kell valamit még ezeken a függvényeken kívül írni a template.php fileba? (márimnt a tetejére deklarációkat vagy akármit) Mert nekem csak ezek a függvények vannak benne, enélkül üres.

Ha kitöröltem a kódból azokat a fura kérdőjeleket (nem tudom mi lehet Alma+C / Alma+V -ztem), akkor sem javult meg. Bekapcsoltam a TextWrangler -ben a láthatatlan karakterek kijelzését, és sehol nincs benne már. Az eredmény ugyanaz furcsa kérdőjel szimbólumok nélkül.

0
0
Illyés Edit képe

A template.php elejére és végére kell a kacsacsőr+kérdőjel:

<?php
function phptemplate_search_item($item, $type) { 
...
}
function phptemplate_search_page($results, $type) { 
...
}
?>

A fájlt UTF-8 kódolással mentsd BOM nélkül. Intelligensebb szerkesztők (nem Windows Jegyzettömb) erre képesek.

Ha ez sem segít, akkor részemről passz.

0
0
Paal képe

A fájlt UTF-8 kódolással mentsd BOM nélkül. Intelligensebb szerkesztők (nem Windows Jegyzettömb) erre képesek.

Az is tudja... :)
Persze egy jEdit ;) vagy Notepad++ (és még vagy 100 másik) jobb megoldás ilyenre.

Üdv, Pali

0
0

--
Palócz Paal Pál, a drupal.hu admin csoportjának tagja
Ajánlott olvasmány: Eric Steven Raymond - Hogyan kérdezzünk okosan

Illyés Edit képe

UTF-8-at tud, de csak BOM-mal (XP-hez csomagolt verzió, a Visztáshoz még nem volt szerencsém).

0
0
taltos képe

Jó meglátás, tényleg nem UTF-8 -ba volt a file (ehh... amatőr vagyok.. :D ). Viszont az oldal így sem megy, a hiba ugyanaz. A megoldás keresését erre problémára azonban abbahagytam, mert találtam egy jó módszert arra, amiért ehhez a theme felülíráshoz akartam nyúlni:

<?php if (($title) && ($node == 0)): ?>
  <h1 class="title">
    <?php print $title; ?>
  </h1>
<?php endif; ?>

Ezt helyeztem el a page.tpl.phpban. Nem a legszebb megoldás, de működik. Ha legközelebb összeakadok ezekkel a függvényfelülírásokkal, majd több időt áldozok rá.

Köszönöm az eddigi segítséget! :)

0
0