Press "Enter" to skip to content

[STARSZE WERSJE 1.7] Jak w PrestaShop dodać dodatkowe pole tekstowe (na karcie produktu) z możliwością jego edycji?

Admin 10

Czasem zachodzi potrzeba osadzenia dodatkowych informacji na karcie produktu jak np. czas przesyłki danego produktu albo inna krótka informacja na potrzeby SEO – inna dla każdego produktu.

UWAGA! Jest to artykuł dotyczący starszych wersji PrestaShop 1.7. W wersjach 1.7.8 (i nowszych) ten patent niestety nie zadziała. Tu masz poradnik jak wykonać to w nowszych wersjach: https://pskrk.com/jak-w-prestashop-1-7-dodac-edytowalne-pole-tekstowe-prestashop-dodanie-numeru-sku/

Co za tym idzie – musi być ona edytowalna w każdym produkcie z osobna.

Efekt na którym nam zależy:

Dodatkowe pole do edycji w produkcie (PrestaShop 1.7)

Potem taka informację możemy np. zaprezentować na karcie produktu w wybranym miejscu w szablonie.

Już poruszaliśmy podobne zagadnienia w tych artykułach: https://pskrk.com/dodanie-dodatkowego-pola-opisu-w-kategorii-presta-shop-1-6/  https://pskrk.com/pozycjonowanie-dodanie-alternatywnego-tytulu-w-kategorii-presta-shop-1-6/

UWAGA! Modyfikacja ma charakter zmiany wprost w plikach PHP aplikacji. Po wykonaniu np. aktualizacji systemu należy wykonać ponownie te modyfikacje aby ta funkcjonalność nadal działała. Pamiętaj też o wykonaniu kopii bezpieczeństwa bazy danych i zmienianych plików przed rozpoczęciem modyfikacji.

Modyfikacja plików PHP

W pliku:

/classes/Product.php

W okolicach linii 140 dodaj kod analogiczny do innych zmiennych:

/** @var string Shipping_time */
public $shipping_time;

Podobnie w linii ok 300:

'shipping_time' => array('type' => self::TYPE_STRING, 'validate' => 'isString', 'size' => 32),

Jeśli dodawane pole ma mieć inną długość albo być np. polem tekstowym należy to tutaj uwględnić. Podobnie w zapytaniu SQL na dole artykułu. Tam dodajemy pole o typie varchar(32) jeśli Twoje potrzeby są inne – dodaj np. pole o typie text

Po czym w pliku:

src/PrestaShopBundle/Form/Admin/Product/ProductOptions.php

Nad linią z kodem:

->add('isbn', 'Symfony\Component\Form\Extension\Core\Type\TextType', array(

Wklej:

->add('shipping_time', 'Symfony\Component\Form\Extension\Core\Type\TextType', array(
    'required' => false,
    'label' => $this->translator->trans('Czas przesyłki', [], 'Admin.Catalog.Feature'),
))

Oczywiście możesz odp. przemianować Czas przesyłki na tytuł jaki potrzebujesz

W pliku:

src/PrestaShopBundle/Model/Product/AdminModelAdapter.php

Pod linią z kodem:

'isbn' => $this->product->isbn,

Wklej:

'shipping_time' => $this->product->shipping_time,

Zmiana w szablonach

1) zmiana w szablonie w adminie sklepu

W pliku:

src/PrestaShopBundle/Resources/views/Admin/Product/form.html.twig

Pod kodem:

<div class="row">
                      <fieldset class="col-md-4 form-group">
                        <label class="form-control-label">
                          {{ form.step6.upc.vars.label }}
                          <span class="help-box" data-toggle="popover"
                            data-content="{{ "This type of product code is widely used in the United States, Canada, the United Kingdom, Australia, New Zealand and in other countries."|trans({}, 'Admin.Catalog.Help') }}" ></span>
                        </label>
                        {{ form_errors(form.step6.upc) }}
                        {{ form_widget(form.step6.upc) }}
                      </fieldset>

Wklej:

<fieldset class="col-md-4 form-group">
                        <label class="form-control-label">
                          {{ form.step6.shipping_time.vars.label }}
                        </label>
                        {{ form_errors(form.step6.shipping_time) }}
                        {{ form_widget(form.step6.shipping_time) }}
                      </fieldset>

UWAGA! Aby pole pojawiło się w edycji produktu należy przeczyścić zawartość folderu cache na serwerze: app/cache/ dodatkowo najlepiej odświeżyć pamięć podręczną w dziale Zaawansowane -> Wydajność

2) Osadzenie treści z nowego pola na karcie produktu

W pliku

themes/{SZABLON}/templates/catalog/product.tpl

W miejscu gdzie chcesz aby pojawiła sie ta informacja wklej:

{block name='product_shipping_time'}
  <div itemprop="shipping_time">{$product.shipping_time nofilter}</div>
{/block}

Tutaj też trzeba mieć na uwadze potrzebę odświeżenia cache albo wymuszenia kompilacji szablonu w dziale Zaawansowane -> Wydajność

Zmiana w SQL.

Finalnie wykonaj to zapytanie w bazie danych (np. przez PhpMyAdmin na Twoim serwerze), doda to dodatkowe pole w bazie danych sklepu:

ALTER TABLE `ps_product` ADD `shipping_time` VARCHAR(32) NULL DEFAULT NULL AFTER `state`;

Gotowe!

 

grafika: pexels.com

  1. Krzysiek Krzysiek

    Super 🙂 A co jeśli produkt ma kombinacje? Wówczas pole to będzie się tyczyło wszystkich kombinacji. Jeszcze lepiej by było, gdyby dało się dla każdej kombinacji z osobna ustawić dane pole.

    Pozdrawiam

    • Admin Admin

      @Krzysiek, ale to już wyższa szkoła jazdy by była:)

      • Krzysiek Krzysiek

        Pewnie tak 🙂 Nie mogę się doczekać v2!

  2. Dariusz Dariusz

    A czy istnieje możliwość żeby na tym samym screenie miejsce Dostosowanie np. Tekst lub dodanie pliku uzależnić od dodatkowego kosztu czyli ustawiamy dostosowanie No. Dedykacja klient wpisuje dedykacje i akceptuje dedykacje a do kosztu produktu dolicza się np. 10zl
    I to samo jak dodamy pole dodawania pliku klient dodaje plik a cena rośnie o x zł

    • Admin Admin

      @Dariusz niestety nie wiem jak to zrobić bez jakiegoś ekstra przeprogramowania. Np wypełnienie tych pól automatycznie zaznaczało by odp. atrybut przy produkcie.
      Inne rozwiązanie to produkt z polami do dostosowania – inna cena.

  3. Przemysław Przemysław

    a co się stanie gdy zrobimy aktualizacje presty do najnowszej wersji?

    • Admin Admin

      Wtedy trzeba nanieść jeszcze raz zmiany w kontrolerach PHP. Po akutalizacji zostaną one zastąpione domyślnymi/nowymi plikami PHP.

      • Przemek Przemek

        dzieki za info w klasy i kontrolery mozna nadpisać,

        a te te pliki src/PrestaShopBundle/Resources/views/Admin/Product/form.html.twig?

        z lokalizacji /src

  4. W wersji 1.7.7.2 nie mam tego pliku
    src/PrestaShopBundle/Resources/views/Admin/Product/form.html.twig

    gdzie w takim razie wrowadzic dalsze zmiany ?

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 !
Import produktów przez CSV i brak zdjęć miniatur. Jak temu…