Od dłuższego czasu zbieram się do napisania artykułu, traktującego o własnych meta tagach w komponencie VirtueMart. Ostatnio miałem straszny przemiał w pracy, stąd takie opóźnienia w publikacji nowych tematów na blogu, za co serdecznie przepraszam.

Niniejszy tutorial zostanie podzielony na dwie części. W pierwszej z nich dowiesz się jak zmodyfikować bazę danych oraz pliki, ażeby móc przypisywać własne meta tagi do produktów oraz kategorii VirteMart. Druga część pokaże, w jaki sposób wprowadzone dane zintegrować z front page komponentu.

Pamiętasz artykuł opisujący jak dodać dodatkowe parametry w produktach VirtueMart? Jeśli nie, zapraszam do przypomnienia sobie owego tematu, gdyż będzie on niezbędny:

http://blog.safistudio.pl/2011/01/27/dodatkowe-pole-produktu-w-virtuemart/

Zgodnie z powyższa instrukcją, rozbuduj produkt o dwa dodatkowe pola – page_title oraz page_description. Poniżej przedstawiam mała pomoc, a mianowicie komendy SQL, które przydadzą się do update’u bazy danych. Pamiętaj by zastąpić przedrostki tabel {_jos} oraz {vm} takimi, jakie masz w swojej bazie danych:

ALTER TABLE jos_vm_product ADD COLUMN page_title VARCHAR(100) NOT NULL;
ALTER TABLE jos_vm_product ADD COLUMN page_description VARCHAR(255) NOT NULL;

Jeśli wszystko wykonałeś poprawnie. Formularz dodawania produktu powinien wyglądać następująco:

Pamiętaj, aby dokonać także stosownych zmian w klasie produktu (plik ps_product.php). Po zapisaniu produktu, nowe dany powinny zostać zachowane w bazie danych.

Ok. Połowa zabawy na dzisiejszy dzień już za nami. Teraz należy wykonać te same czynności w przypadku kategorii produktów. Reasumując musimy zmodyfikować bazę danych, edytować plik formularza kategorii oraz zmodyfikować plik klasy kategorii (ps_product_category.php). Zaczniemy od pierwszego kroku. W administratorze SQL (np. phpmyadmin) dokonaj następującego update’u bazy danych:

ALTER TABLE jos_vm_category ADD COLUMN page_title VARCHAR(100) NOT NULL;
ALTER TABLE jos_vm_category ADD COLUMN page_description VARCHAR(255) NOT NULL;

Jak zapewne zauważyłeś, tabela jos_vm_category otrzymała identyczne kolumny, co w przypadku modyfikacji tabeli jos_vm_product, a to dlatego, że chcemy wzbogacić kategorie o takie same parametry co produkty (czyli meta tagi).

Przechodząc do kolejnego kroku, musisz odnaleźć plik formularza kategorii. W tym celu przejdź do katalogu:

administrator/components/com_virtuemart/html/

oraz wybierz plik: product.product_category_form.php

W linijkach od ok. 60 do 65 powinien widnieć następujący kod:

<tr>
    <td width="21%" nowrap><div align="right"><?php echo $VM_LANG->_('PHPSHOP_CATEGORY_FORM_NAME') ?>:</div></td>
    <td width="79%">
        <input type="text" name="category_name" size="60" value="<?php echo shopMakeHtmlSafe( $db->sf('category_name')) ?>" />
    </td>
</tr>

Za tym kodem dodamy nasze dodatkowe pola – tytuł oraz opis strony:

<tr>
    <td width="21%" nowrap><div align="right">Tytuł strony:</div></td>
    <td width="79%">
        <input type="text" name="page_title" size="60" value="<?php echo shopMakeHtmlSafe( $db->sf('page_title')) ?>" />
    </td>
</tr>
<tr>
    <td width="21%" nowrap><div align="right">Opis strony:</div></td>
    <td width="79%">
        <input type="text" name="page_description" size="60" value="<?php echo shopMakeHtmlSafe( $db->sf('page_description')) ?>" />
    </td>
</tr>

Kod jest bardzo prosty i nie wymaga tłumaczenia. Jest to identyczny krok, co w przypadku modyfikacji formularza produktu, zatem nie będę się powtarzał :). Najważniejszy jest tutaj efekt. Po wywołaniu formularza, powinieneś ujrzeć mniej więcej coś takiego:

Formularz posiada już miejsce na niezbędne parametry. Teraz musimy wskazać ViruteMart, że wprowadzone dane musi przechowywać w zmodyfikowanej bazie danych. Do tego celu edytuj następujący plik:

administrator/components/com_virtuemart/classes/ps_product_category.php

Tak samo jak w przypadku produktów, musimy zmodyfikować funkcje add() oraz update(). Pierwsza z nich zaczyna się od linijki ok. 224, druga zaś od 297. Przejdźmy do funkcji add(). Znajdź następujący kod:

$fields = array('vendor_id' => $ps_vendor_id,
    'category_name' => vmGet( $d, 'category_name' ),
    'category_publish' => vmGet( $d, 'category_publish' ),
    'category_description' => vmGet( $d, 'category_description', '', VMREQUEST_ALLOWHTML ),
    'category_browsepage' => vmGet( $d, 'category_browsepage' ),
    'products_per_row' => vmRequest::getInt( 'products_per_row' ),
    'category_flypage' => vmGet( $d, 'category_flypage' ),
    'category_thumb_image' => vmGet( $d, 'category_thumb_image' ),
    'category_full_image' => vmGet( $d, 'category_full_image' ),
    'cdate' => $timestamp,
    'mdate' => $timestamp,
    'list_order' => $list_order,
);

Na końcu tablicy przechowującej dane z formularza musisz dodać nowe prametry (page_title oraz page_description). Po modyfikacji, powyższy kod powinien przyjąć następującą formę:

$fields = array('vendor_id' => $ps_vendor_id,
    'category_name' => vmGet( $d, 'category_name' ),
    'category_publish' => vmGet( $d, 'category_publish' ),
    'category_description' => vmGet( $d, 'category_description', '', VMREQUEST_ALLOWHTML ),
    'category_browsepage' => vmGet( $d, 'category_browsepage' ),
    'products_per_row' => vmRequest::getInt( 'products_per_row' ),
    'category_flypage' => vmGet( $d, 'category_flypage' ),
    'category_thumb_image' => vmGet( $d, 'category_thumb_image' ),
    'category_full_image' => vmGet( $d, 'category_full_image' ),
    'cdate' => $timestamp,
    'mdate' => $timestamp,
    'list_order' => $list_order,
    'page_title' => vmGet( $d, 'page_title' ),
    'page_description' => vmGet( $d, 'page_description' )
);

Tą samą akcję wykonaj teraz dla funkcji update(). Jeśli wszystko wykonałeś poprawnie, dane wprowadzone w formularzu kategorii powinny być każdorazowo zapisywane.

Ponad 50% pracy już za nami. W kolejnym artykule opiszę jak wyświetlać wprowadzane meta tagi. Dzięki temu będziesz mógł samemu określać, jaki tytuł oraz opis powinny się pojawiać się na stronie produktu czy też kategorii. Powyższa modyfikacja znacznie ułatwi optymalizację Twojej witryny pod kątem SEO.

Komentarze mile widziane :)