W ostatnim artykule opisałem, w jaki sposób zmodyfikować bazę danych oraz pliki VirtueMart, aby można było dodawać własne meta tagi, zarówno do kategorii jak i samych produktów. W celu przypomnienia materiału zapraszam do lektury:

http://blog.safistudio.pl/2011/05/19/virtuemart-wlasne-meta-tagi-cz-1/

Dzisiejszy artykuł pokaże Ci, jak wykorzystać wspomniane modyfikacje do wyświetlania wprowadzonych danych po stronie front end. Zadanie jest niezwykle proste. W tym celu będziemy musieli edytować tylko dwa pliki. Zacznijmy od pierwszego z nich:

administrator/components/com_virtuemart/html/shop.browse.php

W powyższym pliku musimy znaleźć kod, który odpowiada za tworzenia meta danych. Opis oraz tytuł strony, tworzony przy pomocy tego pliku dotyczy kategorii produktów. Cały skrypt zaczyna się od linijki ok. 65:

if( $category_id ) {
/**
* CATEGORY DESCRIPTION
*/
    $db->query( "SELECT category_id, category_name FROM #__{vm}_category WHERE category_id='$category_id'");
    $db->next_record();
    $category_name = shopMakeHtmlSafe( $db->f('category_name') );
// Set Dynamic Page Title
    $vm_mainframe->setPageTitle( $db->f("category_name") );
    $desc =  $ps_product_category->get_description($category_id);
    $desc = vmCommonHTML::ParseContentByPlugins( $desc );
// Prepend Product Short Description Meta Tag "description" when applicable
    $mainframe->prependMetaTag( "description", substr(strip_tags($desc ), 0, 255) );
}

Jak zapewne pamiętasz, w tabeli kategorii dodaliśmy dwa dodatkowe parametry – page_title oraz page_description. W pierwszej kolejności musimy dopisać te komórki do zapytania SQL, ażeby móc wykorzystać nowe meta dane:

$db->query( "SELECT category_id, category_name, page_title, page_description FROM #__{vm}_category WHERE category_id='$category_id'");

W kolejnych linijkach możesz znaleźć następujący kod:

$vm_mainframe->setPageTitle( $db->f("category_name") );

Jego zadaniem jest tworzenie dynamicznego tytułu strony. Obecnie wskazuje on na nazwę produktu. Zastąpmy go polem page_title:

$vm_mainframe->setPageTitle( $db->f("page_title") );

Następnie znajdź kod:

$mainframe->prependMetaTag( "description", substr(strip_tags($desc ), 0, 255) );

Zastąp standardową wartość description nową – page_description:

$mainframe->prependMetaTag( "description", substr(strip_tags( $db->f("page_description") ), 0, 255) );

Jak widzisz, zamiast podawania tytułu kategorii pobraliśmy dodatkowy parametr page_description przy pomocy metody $db->f(). Pamiętasz, że wcześniej dopisaliśmy nowe parametry do zapytania SQL? To właśnie dlatego możemy teraz korzystać z obu tych pól.

Zapisz zmiany i sprawdź czy działa. W moim przypadku dla kategorii Hand Tools przypisałem następujące dane:

Page_title -> Tutaj mój własny tytuł strony
Page_description -> A tutaj jakiś tam opis

Poniżej screen źródła strony:

Jak widać wszystko działa ok

Przejdźmy zatem do podstrony produktu. W tym przypadku modyfikujemy plik:

administrator/components/com_virtuemart/html/shop.product_details.php

Musimy wykonać dosłownie te same kroki, co w przypadku kategorii produktów. Kod, który poddamy modyfikacji zaczyna się od linijki ok. 228:

// Set Dynamic Page Title
if( function_exists('mb_substr')) {
    $page_title = mb_substr($product_name, 0, 64, vmGetCharset() );
} else {
    $page_title = substr($product_name, 0, 64 );
}
$vm_mainframe->setPageTitle( html_entity_decode( $page_title, ENT_QUOTES, vmGetCharset() ));
// Prepend Product Short Description Meta Tag "description"
if( vmIsJoomla('1.5')) {
    $document = JFactory::getDocument();
    $document->setDescription(strip_tags( $db_product->f("product_s_desc")));
} else {
    $mainframe->prependMetaTag( "description", strip_tags( $db_product->f("product_s_desc")) );
}

W pierwszych linijkach pliku została zainicjowana zmienna $db_product, która przechowuje wszystkie komórki tabeli produktu VirtueMart. Jest to plus, gdyż nie musimy już modyfikować żadnego zapytania SQL w celu wydobycia dodatkowych parametrów. Posiadamy je od razu we wspomnianej zmiennej.

Ok. Do dzieła. W pierwszej kolejności zmieniamy tytuł strony. W tym celu zmodyfikuj dwa parametry:

if( function_exists('mb_substr')) {
    $page_title = mb_substr($product_name, 0, 64, vmGetCharset() );
} else {
    $page_title = substr($product_name, 0, 64 );
}

Zamiast zmiennych $product_name podaj metodę wyciągającą wartość z page_title:

if( function_exists('mb_substr')) {
    $page_title = mb_substr ($db_product->f('page_title'), 0, 64, vmGetCharset() );
} else {
    $page_title = substr ($db_product->f('page_title'), 0, 64 );
}

Teraz zajmijmy się opisem:

if( vmIsJoomla('1.5')) {
    $document = JFactory::getDocument();
    $document->setDescription(strip_tags( $db_product->f("product_s_desc ")));
} else {
    $mainframe->prependMetaTag( "description", strip_tags( $db_product->f("product_s_desc ")) );
}

W tym przypadku akcja jest o wiele prostsza, gdyż mamy już metodę wyciągającą dane z bazy danych. Wystarczy podmienić nazwę komórki, do której chcemy się odwołać tj. product_s_desc na page_description:

if( vmIsJoomla('1.5')) {
    $document = JFactory::getDocument();
    $document->setDescription(strip_tags( $db_product->f("page_description")));
} else {
    $mainframe->prependMetaTag( "description", strip_tags( $db_product->f("page_description")) );
}

To wszystko. Jeśli wykonałeś prawidłowo modyfikację, wszystko powinno działać jak należy, co widać na poniższym screenie:

Powyższa modyfikacja jest bardzo prosta, nie mniej jednak może przynieść wiele korzyści z punktu widzenia SEO. Mam nadzieję, że mój artykuł pomoże Ci rozwiązać problemy związane z optymalizacją swojej witryny. Oczywiście komentarze mile widziane :)