Press "Enter" to skip to content

Dodanie prostego zapytania o dany produkt bazującego na formularzu kontaktowym

Admin 6

Idea jest taka, aby w zapytaniu o dany produkt posłużyć się po prostu formularzem kontaktowym widocznym pod adresem:

http://domenasklepu/index.php?controller=contact

Czyli po prostu na stronie kontaktowej. Chodzi o to, aby przez ten formularz przekazać informację o jaki dokładnie produkt chodzi. Najlepiej w treści wiadomości.

Takie rozwiązanie jest o tyle dobre, że wątek wiadomości wysłanej przez ten formularz (od danego klienta) można śledzić w dziale:

Klienci -> Biuro Obsługi Klienta

Czyli można mieć całą historię rozmowy dotyczącej tego konkretnego zapytania.

Oto jak to w łatwy sposób zrobić.

Uwaga, pokażemy to na przykładzie osadzenia linku do zapytania o produkt na karcie produktu. Jednak zapytanie może być wysłane z dowolnego miejsca poprzez przekazanie w linku ID danego produktu.

1. Modyfikacja szablonu karty produktu.

Otwieramy plik:

/themes/{TWÓJ-SZABLON}/product.tpl

Następnie w wybranym przez nas miejscu wstawiamy link do zapytania:

<a href="/kontakt?productid={$product->id|intval}">zapytaj o produkt</a>

Oczywiście posłużyliśmy się tutaj linkiem skracającym do strony kontaktowej:

/kontakt

Upewnij się że masz taki sam – lub ustaw Twój.

Po prostu sprawdź czy masz włączone przyjazne linki:

Preferencje > Dane URL i SEO > Przyjazny adres url > Tak

Następnie w tabelce na tej stronie znajdujemy stronę kontaktową i sprawdzamy jej „Przyjazny adres URL”

Jeśli masz wyłączone przyjazne linki spróbuj użyć takiego łącza:

<a href="/index.php?controller=contact&productid={$product->id|intval}">zapytaj o produkt</a>

Lub:

<a href="{$link->getPageLink('contact-form', true)|escape:'html'}&productid={$product->id|intval}">zapytaj o produkt</a>

 

2. Modyfikacja kontrollera PHP strony kontaktowej

Otwieramy plik:

/controllers/front/ContactController.php

Znajdujemy metodę (funkcję):

public function initContent()

W jej wnętrzu, przed wystąpieniem kodu:

$this->context->smarty->assign(array(

Wstawiamy kod:

$productInfo = '';
        
        if (Tools::getValue('productid') && is_numeric(Tools::getValue('productid'))) {
        	 
        	$productI = new Product((int)Tools::getValue('productid'),false,$this->context->cookie->id_lang);
        	$productInfo = "Zapytanie o produkt: ".$productI->name."\n\n";
        	 
        }

Następnie do przekazywanych danych szablonowych dopisujemy tę zmienną. Czyli zamieniamy kod:

$this->context->smarty->assign(array(
            'contacts' => Contact::getContacts($this->context->language->id),
            'message' => html_entity_decode(Tools::getValue('message'))
        ));

Na:

$this->context->smarty->assign(array(
            'contacts' => Contact::getContacts($this->context->language->id),
            'message' => html_entity_decode(Tools::getValue('message')),
            'productInfo' => $productInfo
        ));

3. Zmiana szablonu strony kontaktowej

Otwieramy plik:

/themes/{TWÓJ-SZABLON}/contact-form.tpl

Następnie dopisujemy to tę zmienną do treści w textarea. Zamieniamy:

<textarea class="form-control" id="message" name="message">{if isset($message)}{$message|escape:'html':'UTF-8'|stripslashes}{/if}</textarea>

Na:

<textarea class="form-control" id="message" name="message">{$productInfo}{if isset($message)}{$message|escape:'html':'UTF-8'|stripslashes}{/if}</textarea>

Spowoduje to, że na początku wiadomości w formularzu kontaktowym pojawi się tekst:

Zapytanie o produkt: (Nazwa produktu)

Gotowe.

4. Odśwież cache

Aby zmiany były widoczne należy wyłączyć cache. Odświeżyć pamięć podręczną. Następnie ponownie włączyć cache.

Wszystko na podstronie:

Parametry zaawansowane -> Wydajność

Asekuracyjnie także odśwież folder

/cache

Na serwerze.

  1. Sławomir Sławomir

    Witam.
    Działa świetnie, a czy można zrobić tak by zamiast: ” Zapytanie o produkt: (Nazwa produktu)” w treści wiadomości było (Nazwa produktu) jako klikalny link do produktu?
    Jakiego kodu należało by użyć w kontrolerze?
    Pozdrawiam.

    • Admin Admin

      Wybacz @Sławomir za ociąganie się z odpowiedzią. Klikalny link ciężko, bo to pole typu textarea. Tam nie wstawisz hiperłącza. Ale możesz link wstawić zaraz nad tym polem w kodzie html. Chyba że Ci chodzi o łączę w otrzymanej wiadomości e-mail? Ogólnie możesz link do produktu wygenerować posługując się jego ID. Poruszaliśmy już to na blogu.

      • Sławomir Sławomir

        Witam.
        Właśnie chodzi mi o link w otrzymanej wiadomości, by można było szybko przenieść się do strony tegoż produktu. To bardzo ułatwiło by jego identyfikacje gdyż czasem nazwy są podobne. Próbowałem dodać coś takiego:
        $link = new Link();
        $productInfo = „Zapytanie o produkt: „.$link->getProductLink($productI).”\n\n”;
        ale klikalnego linku to nie tworzy lecz tylko suchy ciąg adresu do produktu.
        Może Pan podpowiedzieć co zmienić w kodzie by osiągnąć klikalny link w otrzymanej wiadomości jako (nazwa produktu) jak pierwotnie, ale nie jako ciąg adresu do tegoż produktu?

  2. Dariusz Jankowski Dariusz Jankowski

    Witam
    bardzo fajnie działa ale czy jest rozwiązanie na to żeby pokazywało w wiadomości mailowej produkt i jego parametry razem z wybranym kolorem i rozmiarem itd jakie kody dodać żeby pokazało te informacje do treści wiadomości? Tzn żeby podało w mailu pełne dane np: z linku produktu razem z kombinacjami ale nie w formie linku tylko info tak jak to jest pokazane z Nazwą produktu

  3. Łukasz Łukasz

    Niestety otrzymuję błąd przy tej modyfikacji:
    „Parse error: syntax error, unexpected ”productInfo” (T_CONSTANT_ENCAPSED_STRING), expecting ’)’ in /…/controllers/front/ContactController.php on line 250″

    linia 250 w ContactController.php : 'productInfo’ => $productInfo

  4. Łukasz Łukasz

    Na Preście 1.7.7.7 ten post jest już nie aktualny.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.

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

Zobacz także !
Jak włączyć lub wyłączyć cache sklepu z poziomu SQL?