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.
Zawartość artykułu
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.
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.
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.
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?
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
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
Na Preście 1.7.7.7 ten post jest już nie aktualny.