Sziasztok!
Eddig jutottam, de megakadtam sőt az is lehet, hogy teljesen eltévedtem :)
<?php /* Implementation of hook_block(). */ function hu_forex_block( $op = 'list', $delta = 0, $edit = array() ) { if ($op == 'list') { $block = array(); $block[0]['info'] = t( 'Hungarian forex data of MNB' ); return $block; } else if ( $op == 'view' ) { $block['subject'] = variable_get('hu_forex_block_title', t( 'Forex:' ) ); $block['content'] = theme( 'hu_forex_theme', array() ); return $block; } } /* Implementation of hook_theme(). */ function hu_forex_theme() { return array( 'hu_forex_block' => array( 'template' => 'hu_forex-block', 'arguments' => array(), ) ); } function _hu_forex_xml2assoc($xml) { $tree = null; while($xml->read()) switch ($xml->nodeType) { case XMLReader::END_ELEMENT: return $tree; case XMLReader::ELEMENT: $node = array('tag' => $xml->name, 'value' => $xml->isEmptyElement ? '' : _hu_forex_xml2assoc($xml)); if($xml->hasAttributes) while($xml->moveToNextAttribute()) $node['attributes'][$xml->name] = $xml->value; $tree[] = $node; break; case XMLReader::TEXT: case XMLReader::CDATA: $tree .= $xml->value; } return $tree; } /* Implementation of template_preprocess(). */ function template_preprocess_hu_forex(&$vars) { $sClient=new SoapClient("http://www.mnb.hu/arfolyamok.asmx?WSDL"); $response=$sClient->GetCurrentExchangeRates(); $xmlstr = <<<XML <?xml version='1.0' standalone='yes'?> {$response->GetCurrentExchangeRatesResult} XML; $xml = new XMLReader(); $xml->xml( $xmlstr ); $assoc = _hu_forex_xml2assoc($xml); $vars['forex'] = $assoc; } ?>
Gyanítom, hogy <?php $block['content'] = theme('hu_forex_theme', array() ); ?>
ezzel van valami probléma, de nem jövök rá, hogy mi. Azt írja a theme() függvény leírásánál, hogy az első paraméter a neve a téma funkciónak amit meg akarok hívni. A preprocesszben elméletileg előállítom a $vars['forex'] tömböt amit a hu_forex-block.tpl.php fájlban akarok feldolgozni.
De nem működik, hiába mondom neki, hogy MUKODJ! :)
Valakinek valami ötlete?
Előre is köszönet a segítségért!
Drupal verzió:
Fórum:
javítás -szerintem-
*----*----*
$node ? 'alma' : 'bor'
*----*----*
Hihetetlen!
És tényleg! :) Köszönöm!
Konklúzió: figyelmesebben kell olvasni a leírásokat :)
Üdv!
Dudás József
Még azért nem teljesen jó,
mert a template_preprocess sehogy sem akar végrehajtódni.
A kérdés, hogy ez most miért $block['content'] = theme('hu_forex_block', array() );?
Először azt gondoltam, hogy azért, mert a hook_theme amit visszaad tömböt abban ez a kulcs szerepel, de ha átírom bármi másra, akkor is működik. A template_preprocess_hu_forex vagy template_preprocess_hu_forex_block viszont nem fut le semmiképp.
Nyissak neki új topikot?
Üdv!
Dudás József
Néhány próba
Azért theme('hu_forex_block', array()); mert a theme hook-odban ezt a nevet adtad neki.
Probléma lehet még talán, hogy a tpl.php file-od nem a modulod mellett van *egy könyvtárszinten*... már ötletem nincs ^^
print_r-elgesd végig ^^
*----*----*
$node ? 'alma' : 'bor'
*----*----*
Nem, nem.
A javításod szerint a hu_forex-block.tpl.php-t futtatja, az rendben van. A lökött kérdés azért volt, mert nem töröltem cache-t és ha átírtam a nevet a hook_theme()-ben akkor is lehozta a hu_forex-block.tpl.php-t. Szóval ez érthető :)
A gond az, hogy a template_preprocess-t nem hajtja végre. Próbáltam:
function template_preprocess_hu_forex(&$variables) és
function template_preprocess_hu_forex_block(&$variables)
de egyik sem fut le.
Köszi!
Üdv!
Dudás József
Azt hiszem
Azt hiszem, emiatt nem működik még.
A template fájlodat csak úgy hívd, hu_forex, tehát a hook_theme-nek szerintem így kellene kinéznie:
A preprocess függvény neve pedig jó így:
template_preprocess_hu_forex(&$vars)
.block.tpl-t itt amúgy sincs értelme használni, mert a blokk tartalmát szeretnéd a smink hurkoddal előállítani, ami a block.tpl-ben a $block->content.
*: Szerintem ez is elhagyható, és a hook_block-ban elég csak:
$block['content'] = theme('hu_forex_theme');
Köszi,
hogy fordítottál időt a problémámra!
Üdv!
Dudás József
El vagy tévedve!
Preprocess-t tipikusan akkor használunk, ha valami nincs, vagy nem úgy van ahogyan nekünk kell. Mégpedig ez azért van mert az adott modul nem úgy és azt pakolta a sminkbe amit, mert hát nem tudhatja a modul írója nekünk mire lesz majd szükségünk. De itt Te írod a modult, tehát nincs szükséged preprocessre. A másik ami engem zavar, hogy - véleményem szerinte - bonyolult adatszerkezetet adsz át a sablon fájlnak. Pedig ott csak szövegeket kéne kiíratni, nem pediglen ciklusokat futtatni meg ilyenek. Az tipikusan függvénybe való dolog. Ezzel kb jelezzük a smink készítőjének, hogy ebbe csak akkor nyúlj bele ha nagyon kell és értesz hozzá, mert itt nem egyszerű kopipésztről van szó. Prábáld ezt:
A megjelenítést még meg kell faragnod, meg nem ártana egy kis gyorstárazás, ha megdosolják a szervered, te ne dosold tovább az mnb-t. ;)
pl. percenként szerintem elég lenne ezt letölteni.
pp
Palócz István
https://palocz.hu | https://tanarurkerem.hu
Na ugya, hogy ugye! :O)
Sejtettem én, hogy nem a biztos úton járok. Több a tiédhez hasonló "hagyományosan" írt modul után most elterveztem, hogy "drupálositom" a technikámat :DD Van ez így.
A gyorstárazást globálisan állítsam be 1 órára?
Köszönet!
Üdv!
Dudás József
Nem, nem erre van külön függvény
Mondjuk érdemes lenne egyszer belenézned a drupal.org-on található kézikönyvbe. Legalább a címeket olvasd el! :D
http://drupal.org/node/145279
http://www.lullabot.com/articles/a_beginners_guide_to_caching_data
Aztán itt van ez is:
http://api.drupal.org/
http://api.drupal.org/api/function/cache_set/6
http://api.drupal.org/api/function/cache_get/6
pp
(még van két hely a tanfolyamon, ha érdekel. :D)
Palócz István
https://palocz.hu | https://tanarurkerem.hu
Bele, hát persze :)
Bele is nézek, de a gyorstárazással eddig még távoli kapcsolatba sem kerültem, nemhogy közelibe :))
Api-t olvasgatok ...
Tanfolyam -> idő ... :(
Köszi a válaszokat!
Üdv!
Dudás József