Modulių atvaizdavimas naudojant 'Module Chrome'

PDFSpausdintiEl. paštas

Trečiadienis, 22 Gruodis 2010 03:17 Parašė di3sel Peržiūrų: 3397

( 2 Balsai )
Modulių atvaizdavimas naudojant 'Module Chrome' - 5.0 out of 5, based on 2 votes

Dažnai kuriant ar modifikuojant Joomla! šablonus atsiranda poreikis keisti modulių atvaizdavimą skirtingose modulių pozicijose. Pavyzdžiui svetainės viršuje atvaizduoti modulius be antraščių ir rėmelių, kairėje esančius modulius atvaizduoti suapvalintose dėžutėse su antraštėmis ir t.t. Tai galima padaryti naudojant atskirus CSS stilius kiekvienai modulio pozicijai, tačiau šis būdas nėra pats geriausias. Tam į pagalbą ateina Module Chrome funkcija. Ji leidžia kiekvienai modulio pozicijai parinkti atskirą ir tik jai skirtą atvaizdavimo būdą.

Visi modulių atvaizdavimo būdai aprašomi modules.php faile, kurį galite rasti savo šablono /html kataloge. Pavyzdžiui: JOOMLA_KATALOGAS/Templates/Šablono_katalogas/html/modules.php. Jei jūsų šablone šio failo nėra, galite jį sukurti naudodami įprastą teksto redaktorių (asmeniškai aš visiems programavimo darbams rekomenduoju naudoti Notepad++).

Modules.php failo turinį sudaro funkcijos. Jų gali būni viena, ar daugiau. Pradžiai panagrinėkime patį paprasčiausią pavyzdį su viena funkcija:

1
2
3
4
5
6
<?php
function modChrome_Pavyzdys1($module, &$params, &$attribs)
{
/* Modulio atvaizdavimo kodas */
}
?>

 

Taigi kuriant naują funkciją būtina nurodyti jos pavadinimą, kuris sudaromas iš modChrome_ + pageidajamas modulio atvaizdavimo stiliaus pavadinimas. Pavyzdžiui: modChrome_Top.

Kaip matote, ši funkcija naudoja tris argumentus: $module, &$params ir &$attribs, kurie leidžia mūsų funkcijoje naudoti visus modulio parametrus.

Pagrindiniai parametrai:
$module->title -- atvaizduojama modulio antraštė;
$module->content -- atvaizduojamas modulio turinys;
$module->showtitle -- grąžina boolean tipo kintamąjį (true arba false). Jei modulio nustatymuose pasirinkta "Rodyti modulio antraštę", gražinama reikšmė true ir atvirkščiai.
$params->get('moduleclass_sfx') -- grąžina modulio klasės sufiksą.

Žemiau pateikiamas nesudėtingas funkcijos pavyzdys:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
function modChrome_Pavyzdys1($module, &$params, &$attribs)
{ ?>
<div class="mod<?php echo $params->get('moduleclass_sfx');?>">
<div class="module">
<?php if ($module->showtitle) : ?>
<div class="t"><?php echo $module->title; ?></div>;
<?php endif; ?>
<div class="c"><?php echo $module->content;?></div>;
<div class="clr"></div>
</div>
</div>
<?php
}
?>

 


Kaip matote, šiame pavyzdyje funkcijoje naudojamas HTML kodas, tačiau jei Jums arčiau širdies viską rašyti vien PHP kalba, tas pats pavyzdys atrodytų taip:

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
function modChrome_Pavyzdys1($module, &$params, &$attribs)
{
echo '<div class="mod'.$params->get('moduleclass_sfx').'">';
echo '<div class="module">';
if ($module->showtitle) {
echo '<div class="t">'.$module->title.'</div>';
}
echo '<div class="c">'.$module->content.'</div>';
echo '<div class="clr"></div>'
echo '</div></div>'
}
?>

 


Abu užrašymo būdai yra priimtini ir funkcionalumui įtakos neturi, todėl rinkitės tą būdą, kuris Jums yra lengviau suprantamas.

Norėdami priskirti šį atvaizdavimo stilių modulio pozicijai, šablono index.php faile pakeiskite standartinį modulio įterpimo kodą:

1
type="modules" name="Pozicijos_pavadinimas" />

į:

1
type="modules" name="Pozicijos_pavadinimas" style="Pavyzdys1" />

Kaip atrodo modulio atvaizdaviamas, naudojant šią funkciją? Kaip pavyzdį galime sukurti 'Įprastas HTML' modulį, su antrašte 'Bandymas' ir į turinį įrašę kokį nors tekstą, pavyzdžiui: 'Bandomasis tekstas' ir priskirkime modulio klasės sufiksą '-test'. Tuomet modulis bus atvaizduojamas taip:

1
2
3
4
5
6
7
<div class="mod-test">
<div class="module">
<div class="t">Bandymas</div>
<div class="c">Bandomasis tekstas</div>
<div class="clr"></div>
</div>
</div>

Kaip matote, šiam moduliui priskiriama pakankamai daug CSS klasių, bet iš asmeninės patirties galiu pasakyti, jog tai optimaliausias klasių skaičius įprastam moduliui atvaizduoti.

Kiti pritaikymo pavyzdžiai

Jei norite modulio pozicijoje 'top' nerodyti modulio antraštės (nepriklausomai nuo to ji publikuojama ar ne), taip pat Jums nereikalingi modulio klasės sufiksai, nes visus viršuje esančius modulius norite atvaizduoti taip pat, funkcija atrodytų maždaug taip:

1
2
3
4
5
6
7
8
9
10
<?php
function modChrome_top($module, &$params, &$attribs)
{
echo '<div class="module">';
echo '<div class="c">'.$module->content.'</div>';
echo '<div class="clr"></div>'
echo '</div>'
}
?>
 

 

Jei norite atvaizduoti modulį suapvalintose dėžutėse, reikia pridėti dar keturias papildomas CSS klases:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
function modChrome_Pavyzdys1($module, &$params, &$attribs)
{
echo '<div class="mod'.$params->get('moduleclass_sfx').'">';
echo '<div class="module">';
echo '<div class="t1"><div class="t2"></div></div>'; // Viršutinio rėmelio CSS klasės
if ($module->showtitle) {
echo '<div class="t">'.$module->title.'</div>';
}
echo '<div class="c">'.$module->content.'</div>';
echo '<div class="clr"></div>'
echo '<div class="b1"><div class="b2"></div></div>'; // Apatinio rėmelio CSS klasės
echo '</div></div>'
}
?>

 


Tai tik keli iš daugelio Module Chrome pritaikymo pavyzdžių. Neabejoju, jog žinodami pagrindinius principus patys sukursite daugybę geresnių.:) Jei kils klausimų ar neaiškumų - visada galite kreiptis į mane asmeniškai, pasistengsiu padėti kiek galėsiu. Pirmam kartui tiek :)

 

p.s. tai pirmasis mano straipsnis, susijęs su Joomla!, todėl labai laukiu papildymų, pataisymų ir atsiliepimų komentaruose. Taip pat būčiau dėkingas, jei komentaruose pasiūlytumėte temą kitam straipsniui.


Aptarkite šį straipsnį forume
Norėdami dalyvauti diskusijoje turite prisijungti arba užsiregistruoti .

Joomla123.lt is not affiliated with or endorsed by Open Source Matters or the Joomla! Project.
The Joomla!® name is used under a limited license from Open Source Matters in the United States and other countries.