• Kontakt
  • O systemie
  • Strona główna
Pomoc
  • Założenia systemu
  • Praca z systemem
  • Opcje
    • Treść
    • Menu
    • Narzędzia
      • Menadżer ilustracji i mediów
      • Menadżer plików
      • Bazy
      • Formularze
      • Banery
      • Galeria zdjęć
      • Kreator banerów
      • Newsletter
      • Opisy parametryczne
      • Sonda
      • Sprzedaż on-line
      • Forum
    • Wygląd
    • Administracja
    • Zatwierdź zmiany
    • Podgląd
  • Szablony
  • Moduły
  • Edytor HTML
  • E-commerce - sprzedaż online
  • Inne zagadnienia
  • Przykłady rozwiązań

Opisy parametryczne

Opisy parametryczne dają możliwość opracowania w ramach jednorodnej bazy danych różnych schematów opisu cech produktu.

Dobrym przykładem zastosowania tego mechanizmu jest baza produktów w sklepie komputerowym - poszczególne grupy elementów powinny być opisane wg różnych ale jednak stałych wzorców - monitor: rozdzielczość, pobór mocy, czas reakcji, jasność itp; karta graficzna: procesor, częstotliwość taktowania, pamięć podręczna itd - mimo tych różnic w strukturze opisu baza produktów powinna być wspólna  - tu pomocne jest zastosowanie opisów parametrycznych w systemie Actualizer CMS.

Edycja szablonu



Edycja parametrów



Implementacja opisów parametrycznych

Aby powiązać opis parametryczny z bazą zdefiniowaną w systemie należy w strukturze bazy dodać pole o typie:
  • opis parametryczny [params]
    • w polu "Opcje dodatkowe" wpisujemy nazwę pola opisującego rekord w "tej" tabeli (np "nazwa")
od tej chwili można dla danego rekordu w bazie zdefiniować opis parametryczny.

Opisy parametryczne od strony frot-endu są obsługiwane przez moduł xBase.

Przykład szablonu generującego tabelę z opisem parametrycznym przy wskazaniu na dany rekord:

{if count($mod.xbase.details.params.value.parameters)>0}
<table class="parameters">
<caption>Parametry produktu</caption>
<tbody>
{foreach item=ipar key=kpar name="par" from=$mod.xbase.details.params.value.parameters}
    {if $ipar.node}
    <tr{if $smarty.foreach.par.first}class="first-par"{/if}><td colspan="2" class="param param-head">{$ipar.name}</td></tr>
    {else}
    <tr class="{if $ipar.level}subparam{elseif $smarty.foreach.par.first}first-par{/if}"><td class="param">{$ipar.name}</td><td>
        {foreach item=ival key=kval from=$item.params.value.values.$kpar}
            {$ival}<br>
        {/foreach}
    </td></tr>
    {/if}
{/foreach}
</tbody>
</table>
{/if}

Kod CSS do powyższego przykładu:

table.parameters {
margin: 10px 0;
border-collapse: 0;
border-spacing: 0;
border: 0;
padding: 5px;
border: 1px #f94 solid;
}

table.parameters caption {
margin-top: 10px;
text-align: left;
color: #f82;
}

table.parameters td {
border-top: 1px #aaa dashed;
padding: 3px 15px 3px 0;
vertical-align: top;
}

table.parameters td.param {
font-weight: bold;
background: url(/img/library/markers/sq_arr.gif) 1px 3px no-repeat;
padding-left: 20px;
}

table.parameters tr.subparam td.param {
background-image: none;
padding-left: 20px;
font-weight: normal;
}

table.parameters tr.subparam td {
border-top: 1px #eee solid;
padding: 2px 15px 2px 0;
}

table.parameters tr.first-par td {
border-top: 0;
}

Filtrowanie wg parametrów.

Kolekcja wartości i parametrów dla formularza filtrowania pobierana jest przez moduł pvalues - należy go dodać jako moduł nieobiektowy, np. jako moduł doklejony do instancji modułu xBase, który obsługuje listę produktów


Szablon formularza filtrowania wg parametrów (wymaga jQuery, dodatkowo uwzględnia pola "Producent - lista w $mod.prods i cena"):

{if $mod.pvalues}
<script type="text/javascript">
var url_pvid = [{$smarty.get.pvid|replace:'-':','}];
var url_producent = [{$smarty.get.eq.producent|intval}];
var url_pvint = {literal}{}{/literal};
{if $smarty.get.pvint}
{foreach item=i key=k from=$smarty.get.pvint}
url_pvint[{$k}] = '{$i}';
{/foreach}
{/if}
{literal}
$(document).ready( function(){
    if (url_pvid.length > 0) {
    $('select.pvselect').each(function() {
        var a,i;
        //alert(this.options.length);
        for (a = 0; a < this.options.length; ++a) {
            if (this.options[a].value && array_search(this.options[a].value,url_pvid)) {
                //this.value = this.options[a].value;
                this.selectedIndex = a;
                break;
            }
        }
    });
    }

    for(a in url_pvint) {
        $('select.pvselect[name='+a+']').val(url_pvint[a])
    }
});


function pvfilter(c) {
    var pvid = '';
    var pvint = '';
    var pvsep = '';
    var sep = '';
    $('select.pvselect').each(function() {
        if (this.value) {
            if (this.value.indexOf('t') != -1) {
                pvint += sep + 'pvint-'+this.name+','+this.value
                sep = ',';
            }
            else {
                pvid += pvsep + this.value;
                pvsep = '-';
            }
        }
    });
    if (pvid != '') pvid = 'pvid,'+pvid;


    // Producent
    var prd = $('select[name=producent]').val();
    if (prd != '') pvid += (pvid?',':'')+'eq-producent,'+prd;

    // Cena
    var cena = $('select[name=cena]').val();
    if (cena != '') pvid += (pvid?',':'')+cena;




    if (pvint != '') pvid += (pvid?',':'')+pvint;
    if (pvid) {
        document.location.href=c+pvid+'.html';
    }
    else document.location.href = c;
}
{/literal}
</script>
<form onsubmit="pvfilter('/{$category.$cat.path}/');return false;">
<fieldset id="filter">
<legend>Szukaj wg parametrów</legend>
<table>
<tr>
{foreach item=fil key=cn from=$mod.pvalues.params}
<td>{$fil} </td>
{/foreach}
<td>producent</td>
<td>cena</td>

<td rowspan="2" valign="bottom"><input type="image" src="/actualizer/img/search.gif" alt="szukaj" /></td>
</tr>
<tr>
{foreach item=fil key=cn from=$mod.pvalues.params}
<td>
<select class="pvselect" name="{$cn}">
<option value="">wszystkie</option>
{foreach item=wart key=pvid from=$mod.pvalues.values[$cn]}
<option value="{$pvid}" {if $wart == $smarty.get.eq.$cw}selected{/if}>{$wart}</option>
{/foreach}
</select>
</td>
{/foreach}

<td>
<select name="producent">
<option value="">wszyscy</option>
{foreach item=item name=prod from=$mod.prods}
<option value="{$item.id}" {if $item.id == $smarty.get.eq.producent}selected{/if}>{$item.nazwa}</option>
{/foreach}
</select>
</td>


<td>
<select name="cena">
<option value="">dowolna</option>
{foreach name=a item=lt from=$set.user_filtr_ceny}
{if $smarty.foreach.a.first}
<option value="lt-cena,{$lt}" {if $smarty.get.lt.cena == $lt} selected{/if}>< {$lt} zł</option>
{else}
<option value="gteq-cena,{$gt},lteq-cena,{$lt}" {if $smarty.get.gteq.cena == $gt} selected{/if}>{$gt} ~ {$lt} zł</option>
{/if}
{assign var=gt value=$lt}
{/foreach}
<option value="gt-cena,{$gt}" {if $smarty.get.gt.cena == $gt} selected{/if}>> {$gt} zł</option>
</select>
</td>



</tr>
</table>

</fieldset>
</form>
{/if}

Tagi:xbase, opisy parametryczne

Powered by Actualizer CMS