Press "Enter" to skip to content

dodanie dodatkowego pola opisu w kategorii – Presta Shop 1.6, Presta Shop 1.7 [Aktualizacja]

Admin 14

Domyślnie w danej kategorii opis znajduje się nad listą produktów. Czasem ze względów pozycjonerskich (SEO) zachodzi potrzeba dodania dodatkowego opisu pod produktami. Deklarowanego oddzielnie w edycji lub tworzeniu nowej kategorii.

Presta Shop 1.6 przez swoją innowacyjną budowę pozwala stosunkowo łatwo dodać takie pole. Poniżej szczegóły.

Dodanie pola w bazie danych.

Nasze modyfikacje w plikach były by na nic, gdyby system nie miał gdzie zapisywać tego dodatkowego opisu. Opisy kategorii są trzymane w tabeli ps_category_lang. Dodanie pola realizujemy poprzez zapytanie:

ALTER TABLE `ps_category_lang` ADD `description_alt` TEXT NOT NULL ;

Modyfikacja obiektu Category.

Edytujemy plik:

/classes/Category.php

Na początku klasy PHP: CategoryCore deklarujemy analogiczną do „domyślnego” opisu zmienną. Zastępujemy kod (okolice 40 linii) :

/** @var string Description */
public $description;

/** @var integer Parent category ID */
public $id_parent;

Kodem:

/** @var string Description */
public $description;

/** @var string Alternative Description */
public $description_alt;

/** @var integer Parent category ID */
public $id_parent;

W tym samym pliku odnajdujemy statyczną, publiczną zmienną tablicową $definition;

public static $definition = array(

(okolice 95 linii) i dodajemy do niej kolejny element zamieniając kod:

'description' =>         array('type' => self::TYPE_HTML, 'lang' => true, 'validate' => 'isCleanHtml'),

na:

'description' =>         array('type' => self::TYPE_HTML, 'lang' => true, 'validate' => 'isCleanHtml'),
'description_alt' =>         array('type' => self::TYPE_HTML, 'lang' => true, 'validate' => 'isCleanHtml'),

Modyfikacja kontrolera kategorii.

edytujemy plik:

/controllers/admin/AdminCategoriesController.php

W metodzie konstrukcyjnej __construct() znajdujemy zmienną tablicową $this->fields_list:

$this->fields_list = array(

i dodajemy do niej kolejny element zamieniając kod:

'description' => array(
'title' => $this->l('Description'),
'callback' => 'getDescriptionClean',
'orderby' => false
),

'position' => array(
'title' => $this->l('Position'),
'filter_key' => 'sa!position',
'position' => 'position',
'align' => 'center'
),

na:

'description' => array(
'title' => $this->l('Description'),
'callback' => 'getDescriptionClean',
'orderby' => false
),

'description_alt' => array(
'title' => $this->l('Description Alternative'),
'callback' => 'getDescriptionClean',
'orderby' => false
),

'position' => array(
'title' => $this->l('Position'),
'filter_key' => 'sa!position',
'position' => 'position',
'align' => 'center'
),

(Uwaga dla wersji PrestaShop 1.7 może się to nieznacznie różnić)

W tym samym pliku odnajdujemy publiczną metodę:

renderForm()

(okolice 412 linii) następnie w tej metodzie znajdujemy zmienną tablicową:

$this->fields_form = array(

i dodajemy do niej kolejny element zamieniając kod:

array(
'type' => 'textarea',
'label' => $this->l('Description'),

'name' => 'description',
'autoload_rte' => true,
'lang' => true,
'hint' => $this->l('Invalid characters:').' <>;=#{}'
),

na:

array(
'type' => 'textarea',
'label' => $this->l('Description'),

'name' => 'description',
'autoload_rte' => true,
'lang' => true,
'hint' => $this->l('Invalid characters:').' <>;=#{}'
),

array(
'type' => 'textarea',
'label' => $this->l('Description Alternative'),

'name' => 'description_alt',
'autoload_rte' => true,
'lang' => true,
'hint' => $this->l('Invalid characters:').' <>;=#{}'
),

 

Gotowe, wykonanie powyższych czynności pozwala nam deklarować dodatkowy opis w kategorii. To, jak zostanie on nazwany (w naszym przypadku Alternative Description) zależy tylko od nas, poprzez odpowiednie zmodyfikowanie powyższego kodu. Wygląd pola:

Strony WWW Kraków - SmartProjects.pl

 

Modyfikacja szablonu kategorii.

PrestaShop 1.6:

Pozostało nam tylko zaprezentować dodatkowy opis na sklepie. W tym celu edytujemy plik:

/themes/{NAZWA-SZABLONU}/category.tpl

Nastepnie w miejscu gdzie chcemy aby pojawił się nowy opis wklejamy kod:

{if $category->description_alt && $smarty.get.p < 2}
<div class="cat_desc cat_desc_container clearfix">
{if Tools::strlen($category->description_alt) > 1550}
<div id="category_description_full" class="unvisible rte">{$category->description_alt}</div>
<a href="{$link->getCategoryLink($category->id_category, $category->link_rewrite)|escape:'html':'UTF-8'}" class="lnk_more btn btn-default pull-right"><i class="icon-plus"></i> {l s='More'}</a>
{else}
<div class="rte">{$category->description_alt}</div>
{/if}
</div>
{/if}

Lub krócej:

{if $category->description_alt}

<div class="rte">{$category->description_alt}</div>

{/if}

Jeżeli opis ma być pod listą produktów – musi on sie znaleźć pod wywołaniem tego kodu:

{include file="./product-list.tpl" products=$products}

PrestaShop 1.7:

Otwórz plik:

themes/{szablon}/templates/catalog/listing/product-list.tpl

Na końcu pliku (lub na końcu przed kodem {/block} ) wklej:

  {if $page_name == 'category'}
  
  	{if $category.description_alt && $category.description_alt != ''}
      <div class="block-category">
        <div style="margin-top: 10px;" id="category-description">{$category.description_alt nofilter}</div>
      </div>
    {/if}
  
  {/if}

 

 

  1. Świetny tutorial. Przydało mi się i najważniejsze, że to działa 🙂 Dzięki! Czy posiadacie jakiś sztywny cennik jeśli chodzi o prestashop czy wycena wdrożeń/modyfikacji jest zawsze wyceniana indywidualnie?

    • admin admin

      Dzięki za miłe słowo;) staramy się pomóc. Co do cen raczej indywidualnie, zależy co jest do zrobienia.

    • Witam, czy treść polecenia, które dodaje pole w bazie danych jest na pewno poprawna?
      ALTER TABLE
      ::CODECOLORER_BLOCK_3::
      ADD
      ::CODECOLORER_BLOCK_4::
      TEXT NOT NULL ;

      • Admin Admin

        Masz rację @Jakub – zostało to poprawione w opisie artykułu. Dzięki za zwrócenie na to uwagi!

  2. Cześć, wszystko prawie działa dobrze. Po dodaniu tekstu w drugim (alternatywnym polu) pojawia się on w bazie danych, ale nie wyświetla się na stronie :(. Czy czasem nie musi być dodane gdzieś jeszcze zapytanie odnośnie pobrania danych z bazy? Select …. ?

    • Działa, mój błąd xD. W presta 1.7 zamiast {$category->description_alt} jest {$category.description_alt nofilter}

      Super!!!

      • Admin Admin

        @ietui.pl dokładnie tak – własnie zaktualizowaliśmy treść artykułu dla PS 1.7 🙂

  3. Maciej Maciej

    Dzień Dobry,

    Niestety nie działa. Możliwość wpisania alternatywnego tekstu jest, rekord w bazie danych się pojawia, a na stronie nic. Mimo dodania {$category->description_alt} w category.tpl

    Co może być zrobione źle?

    • Admin Admin

      Cześć, a napisz @Maciej dla jakiej wersji PS to robisz? A kod {$category.description_alt} też nie działa? hmm

  4. Maciej Maciej

    Cześć,

    Dziękuje za odpowiedź, niestety {$category.description_alt} , również nie działa. Wersja to 1.6.1.17 . Mam pytanie czy istnieje jakieś inne rozwiązanie na wdrożenie dodatkowego tekstu pod produktami np. modułem?

    Pozdrawiam i dziękuje za odpowiedź 🙂

  5. Kamil Kamil

    Witam.
    Niestety pomimo kilku prób nie jestem w sanie dodać nawet dodatkowego pola do wpisania drugiego opisu…
    Jedyne co mi się udaje to dodać nowy rekord w bazie danych…
    Prawdopodobnie robię coś niewłaściwie…

    Dodatkowe pole staram się dodać w prestashop 1.7.6.5

  6. Modyfikacja kontrolera kategorii – dla presty w wersji 1.7 tam jest spora różnica w kodzie a nie „niewielka” jak zostało to opisane . Jest szansa żeby to zaktualizować w poradniku? Bo chyba zostało to pominięte

    • Admin Admin

      Ciężko, może w najnowszej PS1.7 istotnie się to bardzo rózni. Na którejś wcześniejszej było zdaje się łatwiej. Jeśli to konieczne prosimy o PW na info@pskrk.com to przedstawimy ofertę zaprogramowania takiej zmiany w sklepie.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.

Zobacz także !
Czasem w skrypcie lub module zachodzi potrzeba dodania nowej podkategorii…