PDA

Zobacz pełną wersję : Jak umożliwić od frontu zmianę parametrów szablonu (z pliku params.ini)



Jola
13-12-2009, 07:10
Opiszę taką możliwość na przykładzie szablonu Rhuk Milkyway.
W panelu administracyjnym (Rozszerzenia->Szablony->rhuk_milkyway->Parametry) mamy możliwość wybrania ustawień:Wariant kolorystyczny, Wariant tła i Szerokość szablonu. Wybrane ustawienia są zapisywane w pliku templates/rhuk_milkyway/params.ini (nie wszystkie szablony mają takie opcje konfiguracyjne, a co z tego wynika - plik params.ini).
Szablon, przed załadowaniem do przeglądarki, pobiera zapisane w pliku params.ini parametry i na ich podstawie wyświetla efekt na stronie.

Zasada modyfikacji jest taka:
- nie musimy dawać wyboru wszystkich parametrów
- dodajemy formularz umożliwiający wybór wcześniej wspomnianych (lub wybranych) parametrów
- dodajemy kod, który pobiera dane z formularza i zapisuje je w postaci ciasteczek.
- inny kod sprawdza czy klient jest posiadaczem ciasteczek z zapisanymi parametrami, jeśli nie - czy istnieje parametr pobrany z formularza, a jeśli i ta opcja zawiedzie - wybierany jest parametr zapisany w pliku params.ini
- na koniec dodanie warunku pobierania parametrów szablonu

Formularz (umieszczenie w tabeli - przykładowe)

<form method="post">
<table cellspacing="1"><tr>
<td><span><?php echo JText::_('Wariant kolorystyczny');?></span></td>
<td>
<?php
$colorVariation_I = array (JHTML::_('select.option', 'blue', JText::_('Niebieski')), JHTML::_('select.option', 'red', JText::_('Czerwony')), JHTML::_('select.option', 'green', JText::_('Zielony')), JHTML::_('select.option', 'orange', JText::_('Pomarańczowy')), JHTML::_('select.option', 'black', JText::_('Czarny')), JHTML::_('select.option', 'white', JText::_('Biały')),);
echo JHTML::_('select.genericlist', $colorVariation_I, 'colorVariation', 'class="inputbox" size="1" onchange="this.form.submit()"', 'value', 'text', ($colorVariation1 ? $colorVariation1 : $this->params->get('colorVariation')));
?>
</td></tr>
<tr>
<td><span><?php echo JText::_('Wariant tła');?></span></td>
<td>
<?php
$backgroundVariation_I = array (JHTML::_('select.option', 'blue', JText::_('Niebieski')), JHTML::_('select.option', 'red', JText::_('Czerwony')), JHTML::_('select.option', 'green', JText::_('Zielony')), JHTML::_('select.option', 'orange', JText::_('Pomarańczowy')), JHTML::_('select.option', 'black', JText::_('Czarny')), JHTML::_('select.option', 'white', JText::_('Biały')),);
echo JHTML::_('select.genericlist', $backgroundVariation_I, 'backgroundVariation', 'class="inputbox" size="1" onchange="this.form.submit()"', 'value', 'text', ($backgroundVariation1 ? $backgroundVariation1 : $this->params->get('backgroundVariation')));
?>
</td></tr>
<tr><td><span><?php echo JText::_('Szerokość szablonu');?></span></td>
<td>
<?php
$widthStyle_I = array (JHTML::_('select.option', 'fmax', JText::_('Maksymalna')), JHTML::_('select.option', 'medium', JText::_('Średnia')), JHTML::_('select.option', 'small', JText::_('Mała')), JHTML::_('select.option', 'fluid', JText::_('Płynna')),);
echo JHTML::_('select.genericlist', $widthStyle_I, 'widthStyle', 'class="inputbox" size="1" onchange="this.form.submit()"', 'value', 'text', ($widthStyle1 ? $widthStyle1 : $this->params->get('widthStyle')));
?>
</td></tr></table></form>Kod:

array (JHTML::_('select.option', 'blue', JText::_('Niebieski')), JHTML::_('select.option', 'red', JText::_('Czerwony')), JHTML::_('select.option', 'green', JText::_('Zielony')), JHTML::_('select.option', 'orange', JText::_('Pomarańczowy')), JHTML::_('select.option', 'black', JText::_('Czarny')), JHTML::_('select.option', 'white', JText::_('Biały')),);odpowiada za przekazywanie wartości <option>, 'blue'to value,JText::_('Niebieski') to opis - podpatrzone w panelu admina: źródło strony

Kod:
echo JHTML::_('select.genericlist', $colorVariation_I, 'colorVariation', 'class="inputbox" size="1" onchange="this.form.submit()"', 'value', 'text', ($colorVariation1 ? $colorVariation1 : $this->params->get('colorVariation')));odpowiada za wyświetlanie całego kodu typu <select>, 'colorVariation' to nazwa zmiennej (name) - podpatrzona również z pliku params.ini

Formularz można umieścić w wybranym miejscu szablonu lub nawet w osobnym module, można dodać warunek wyświetlania jeśli chcemy pokazywać go tylko zalogowanym użytkownikom.

Kod - w przypadku szablonu rhuk_milkyway należy umieścić w sekcji head zaraz pod wpisem <jdoc:include type="head" />

<?php
$color = JRequest::getVar('colorVariation', '', 'post');
$background = JRequest::getVar('backgroundVariation', '', 'post');
$widthStyle = JRequest::getVar('widthStyle', '', 'post');

$colorVariation1 = JRequest::getCmd('colorVariation', $color, 'cookie');
$backgroundVariation1 = JRequest::getCmd('backgroundVariation', $background, 'cookie');
$widthStyle1 = JRequest::getCmd('widthStyle', $widthStyle, 'cookie');

if($colorVariation1 != $color && $color) $colorVariation1 = $color;
if($backgroundVariation1 != $background && $background) $backgroundVariation1 = $background;
if($widthStyle1 != $widthStyle && $widthStyle) $widthStyle1 = $widthStyle;

setcookie("colorVariation",$colorVariation1);
setcookie("backgroundVariation",$backgroundVariation1);
setcookie("widthStyle",$widthStyle1);

?>Dodanie warunków pobierania parametrów w szablonie powoduje, że priorytetowo traktowane są parametry pochodzące z formularza (ciasteczek). Zmodyfikowane musi zostać każde miejce, gdzie parametr jest przekazywany do szablonu.
Sekcja head:

<link rel="stylesheet" href="<?php echo $this->baseurl ?>/templates/rhuk_milkyway/css/<?php echo ($colorVariation1) ? $colorVariation1 : $this->params->get('colorVariation'); ?>.css" type="text/css" />
<link rel="stylesheet" href="<?php echo $this->baseurl ?>/templates/rhuk_milkyway/css/<?php echo ($backgroundVariation1) ? $backgroundVariation1 : $this->params->get('backgroundVariation'); ?>_bg.css" type="text/css" />
Deklaracja Body:


<body id="page_bg" class="color_<?php echo ($colorVariation1) ? $colorVariation1 : $this->params->get('colorVariation'); ?> bg_<?php echo ($backgroundVariation1) ? $backgroundVariation1 : $this->params->get('backgroundVariation'); ?> width_<?php echo ($widthStyle1) ? $widthStyle1 : $this->params->get('widthStyle'); ?>">Dodany kod jest zaznaczony pogrubioną czcionką.

W analogiczny sposób można podrasować inny szablon. Nie można tego zrobić przez skopiowanie podanego tu kodu ponieważ każdy szablon ma własne parametry, opcje tych parametrów i własne miejsca w szablonie gdzie parametry są sprawdzane.