Ahoj,
rád bych se s vámi podělil o malou úpravu, která v Prestashopu umožňuje na stránkách kategorie mít vlastní nadpis H1 nezávislý od názvu kategorie. Toto řešení jistě ocení ti, kteří opravdu řeší onpage SEO faktory nebo potřebují mít například jiný H1 nadpis kategorie (většinou delší a výstižnější) než je samotný název kategorie. Úprava je celkem jednoduchá a týká se šesti souborů. Úprava tedy přidá v administraci e-shopu na kartě kategorie pole Nadpis H1, do kterého můžete vkládat libovolný text nadpisu kategorie. Pokud jej nevyplníte, pak se automaticky dosazuje text názvu kategorie. Úprava byla testována na Prestashop v 1.6.1.16 s defaultní šablonou.
POSTUP:1. v tabulce ps_category_lang je zapotřebí vytvořit nový sloupec h1_custom dotazem v phpMyadminu:
Kód:
ALTER TABLE `ps_category_lang` ADD `h1_custom` text AFTER `description`;
pokud chcete do začátku řádky v h1_custom vypnit názvy kategorií, pak můžete zkopírovat hodnoty pomocí dotazu:
Kód:
UPDATE ps_category_lang SET h1_custom = name;
alespoň nebudete mít v začátku H1 u kategorií prázdné.
2. v souboru classes/Category.php
Za řádek:
Kód:
/** @var int Nested tree model "right" value */
public $nright;
vložit kód:
Kód:
/** @var string H1 custom */
public $h1_custom;
a za řádek:
Kód:
'name' =>array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isCatalogName', 'required' => true, 'size' => 128),
vložit kód:
Kód:
'h1_custom' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isCatalogName','size' => 128),
3. v souboru controllers/admin/AdminCategoriesController.php
za blok:
Kód:
array(
'type' => 'text',
'label' => $this->l('Meta title'),
'name' => 'meta_title',
'maxchar' => 70,
'lang' => true,
'rows' => 5,
'cols' => 100,
'hint' => $this->l('Forbidden characters:').' <>;=#{}'
),
vložit tento blok kódu:
Kód:
array(
'type' => 'text',
'label' => $this->l('Nadpis H1:'),
'name' => 'h1_custom',
'lang' => true,
'hint' => $this->l('Forbidden characters:').' <>;=#{}'
),
To je základní úprava, která umožňuje libovolně nastavovat H1 nadpis. Pokud byste chtěli být ještě dokonalejší, pak následují úprava řeší ještě pár drobných věcí na stránce kategorie. Jednak původní H1 přesune do H2 (dle SEO doporučení má být na kždé stránce jen jeden H1 tag) a velký nadpis nad popisem kategorie přesune do H1 a vloží do něj text vyplnění v adminu e-shopu v poli Nadpis H1. Pokud ho nevyplníte, pak automaticky vloží text názvu kategorie aby H1 nezůstal prázdný.
1. v souboru themes/vaše_šablona/category.tpl
řádky:
Kód:
<span class="category-name">
{strip}
{$category->name|escape:'html':'UTF-8'}
{if isset($categoryNameComplement)}
{$categoryNameComplement|escape:'html':'UTF-8'}
{/if}
{/strip}
</span>
nahradit těmito řádky:
Kód:
<h1 class="category-name">
{strip}
{if $category->h1_custom}
{$category->h1_custom|escape:'html':'UTF-8'}
{else}
{$category->name|escape:'html':'UTF-8'}
{/if}
{if isset($categoryNameComplement)}
{$categoryNameComplement|escape:'html':'UTF-8'}
{/if}
{/strip}
</h1>
to by mělo zajisti aby v případě nevyplněného pole Nadpis H1 v adminu e-shopu byl použit název kategorie.
původní H1 tag změnit na H2:
Kód:
<h1 class="page-heading{if (isset($subcategories) && !$products) || (isset($subcategories) && $products) || !isset($subcategories) && $products} product-listing{/if}"><span class="cat-name">{$category->name|escape:'html':'UTF-8'}{if isset($categoryNameComplement)} {$categoryNameComplement|escape:'html':'UTF-8'}{/if}</span>{include file="$tpl_dir./category-count.tpl"}</h1>
na:
Kód:
<h2 class="page-heading{if (isset($subcategories) && !$products) || (isset($subcategories) && $products) || !isset($subcategories) && $products} product-listing{/if}"><span class="cat-name">{$category->name|escape:'html':'UTF-8'}{if isset($categoryNameComplement)} {$categoryNameComplement|escape:'html':'UTF-8'}{/if}</span>{include file="$tpl_dir./category-count.tpl"}</h2>
To je v základu vše. Pokud ale používáte modul pro filtrování zboží "Layered", pak je ještě dobré upravit v tomto modulu toto:
1. v souboru /themes/default-bootstrap/js/modules/blocklayered/blocklayered.js změnit řádek
Kód:
$('h1.page-heading .cat-name').html(result.heading);
na:
Kód:
$('h2.page-heading .cat-name').html(result.heading);
2. v souboru modules/blocklayered/blocklayered.php
změnit řádek:
Kód:
$category_title = (empty($category->meta_title) ? $category->name : $category->meta_title);
na:
Kód:
$category_title = $category->name;
Pak by už mělo jen stačit vymazat cache a popřípadě reloadnout stránku CTRL+F5.
Jen bych ještě připomněl, že nejsem programátor a úprava je výsledkem modifikace jiné úpravy z
https://www.prestashop.com/forums/topic/272602-solved-add-a-second-category-description/ a mé logické dedukce, jak asi funguje PHP + pomoci administrátora z C4. Prosím tedy tímto o to, jestli by na to nemohl kouknout skutečný programátor, jestli někde není nějaké zásadní bota. Na testovacím e-shopu vše fungovalo bez problému i v debug módu.
Věřím, že úprava přijde někomu vhod.