Polskie wsparcie PrestaShop
PrestaShop => Konfiguracja => Wątek zaczęty przez: motorider w Październik 19, 2009, 12:07:16 am
-
Chciałbym zmienić sposób budowy <title>, teraz jest tak: <title>nazwa_sklepu-produkt</title> chciałbym aby było tak: <title>produkt-nazwa_sklepu</title>, a najlepiej gdyby dało się tak: <title>produkt-kategoria-nazwa_sklepu</title>
W pliku classes/Tools.php linia 493
$ret['meta_title'] = (isset($metas['title']) AND $metas['title']) ? Configuration::get('PS_SHOP_NAME').' - '.$metas['title'] : Configuration::get('PS_SHOP_NAME');
jest kod odpowiadający za <title>, ale tylko dla strony głównej, czy ktoś wie gdzie można dokonać podobnych zmian dla kategorii i produktów?
-
Nie pomogę ci niestety.... ale pamiętam że szukałem rozwiązania i znalazłem na forum prestashop.com... i go nie zastosowałem ;-]
-
Szukałem na forum, ale nie znalazłem. Dziwię się, że nikt nie zwraca na to uwagi, jest to bardzo ważne pod względem SEO, a szczególnie w long tail.
-
nie wiem z ktrorej wersji korzystasz ale standardowo za wszystkie te elementy odpowiada "$meta_title"
definiowane w classes/meta.php oraz classes/tools.php (getMetaTags)
kod odpowiadajacy za wyswietlanie title dla produktow masz powyzej tej lini ktora podajesz
/* Products specifics meta tags */
if ($id_product = Tools::getValue('id_product'))
{
$row = Db::getInstance()->getRow('
SELECT `name`, `meta_title`, `meta_description`, `meta_keywords`, `description_short`
FROM `'._DB_PREFIX_.'product_lang`
WHERE id_lang = '.intval($id_lang).' AND id_product = '.intval($id_product));
if ($row)
{
if (empty($row['meta_description']))
$row['meta_description'] = strip_tags($row['description_short']);
return self::completeMetaTags($row, $row['name']);
}
}
i w return self pownienes umiescic odpowiadającą ci kombinacje - jesli potrzebujesz np producenta czy innych danych - konieczna bedzie zmiana zapytania
jesli potrzebujesz TYLKO zamiany produkt - title zamien linie 505 w pliku tools.php na następujacą:
$metaTags['meta_title'] = $defaultValue.' - '.Configuration::get('PS_SHOP_NAME');
i poprosze plusik za pomoc ;)
-
Dzięki. Chciałbym jeszcze dodać producenta do title, ze zmianą zapytania sobie poradzę, ale słabo u mnie z programowaniem obiektowym. Czy mógłbyś pomóc mi ze zmianą w return self?
-
hmmm jak zmienisz zapytanie to najzwyczajniej dodaj odpowiedni wynik do retur self,
cos co powinno dzialac (z palca, bez testow):
return self::completeMetaTags($row, $row['manufacturer_name'].' - '.$row['name']);
-
wrzuc query jak zrobisz, tam bedzie ze 3-4 table do join - ciekawe jestem jak to wyjdzie ;)
-
Chyba jest gdzieś błąd w zapytaniu ponieważ return self::completeMetaTags($row, $row['name'].' - '.$row['manufacturer']); nic nie zwraca.
/* Products specifics meta tags */
if ($id_product = Tools::getValue('id_product'))
{
$row = Db::getInstance()->getRow('
SELECT distinct '._DB_PREFIX_.'product_lang.name as name, meta_title, meta_description, meta_keywords,
description_short, '._DB_PREFIX_.'manufacturer.name as manufacturer
FROM '._DB_PREFIX_.'product_lang, '._DB_PREFIX_.'manufacturer, '._DB_PREFIX_.'product
WHERE '._DB_PREFIX_.'product_lang.id_lang = '.intval($id_lang).' AND
'._DB_PREFIX_.'product_lang.id_product = '.intval($id_product).' AND
'._DB_PREFIX_.'product_lang.id_product='._DB_PREFIX_.'product.id_product AND
'._DB_PREFIX_.'manufacturer.id_manufacturer='._DB_PREFIX_.'product.id_manufacturer');
if ($row)
{
if (empty($row['meta_description']))
$row['meta_description'] = strip_tags($row['description_short']);
return self::completeMetaTags($row, $row['name'].' - '.$row['manufacturer']);
}
}
To zapytanie testowałem w phpmyadmin i działa więc nie mam pojęcia dlaczego po przerobieniu do PHP przestało.
SELECT distinct ps_product_lang.name as name, meta_title, meta_description, meta_keywords, description_short, ps_manufacturer.name as manufacturer
FROM ps_product_lang, ps_manufacturer, ps_product
WHERE ps_product_lang.id_lang = 3 AND ps_product_lang.id_product = 25 AND
ps_product_lang.id_product=ps_product.id_product AND
ps_manufacturer.id_manufacturer=ps_product.id_manufacturer
-
nie moge sie teraz tym zająć mam spoznione deadline - jak do przyszlego tyg nic nie wymyslisz - postaram sie wrzucic to na tapete ;)
-
Minął już ponad tydzień, ale nadal nie doszukałem się błędu w moim zapytaniu SQL.
-
SELECT distinct ps_product_lang.name as name, meta_title, meta_description, meta_keywords, description_short, ps_manufacturer.name as manufacturer
FROM ps_product_lang, ps_manufacturer, ps_product
WHERE ps_product_lang.id_lang = 3 AND ps_product_lang.id_product = 7 AND
ps_product_lang.id_product=ps_product.id_product AND
ps_manufacturer.id_manufacturer=ps_product.id_manufacturer
wynik = 0
wykonaj to na normalnej instalacji - nie działa w tym przypadku (ID 7) ;) - blad jest powodowany przez przypisanie kilku producentow do wariantow produktu
SELECT distinct ps_product_lang.name as name, meta_title, meta_description, meta_keywords, description_short, ps_manufacturer.name as manufacturer
FROM ps_product_lang, ps_manufacturer, ps_product
WHERE ps_product_lang.id_lang = 3 AND ps_product_lang.id_product = 7 AND
ps_product_lang.id_product=ps_product.id_product
to zapytanie daj dwa wyniki (apple i shure)
uzywając
ps_product_lang.id_product=ps_product.id_product LIMIT 1 - uciekamy nieco nieładnie z dwóch wyników i ratujemy query ;)
ponizszy kod dziala u mnie bez problemu
http://zielonawrozka.com/product.php?id_product=5 // jeden producent
http://zielonawrozka.com/product.php?id_product=7 // dwóch - wyświetlany pierwszy
tak czy inaczej wychodzac z twojego zapytania niewiele zmienilem oprocz wyczyszczenia tego co uznalem za mogące powodować błąd
pozdrawiam
Pawel
-
Twój sposób działa, ale zauważyłem, że mój dla niektórych produktów również. Czy możesz mi wyjaśnić czym wg Ciebie jest wariant produktu?
-
mozesz miec przypisanych kilku producentow do produktu i to w sumie jest wazne - wariant czy tam artybut to juz bez znaczenia ;)
-
mi się wydaje, że title -> to jest to samo co nazwa skepu. Wystarczy w tym miejscu wpisać "Nazwa_sklepu i część reklamowa", tak mi się wydaje ale nie jestem pewny.
Pozdrawiam
-
Rider jak zrobisz daj link - chcialbym zobaczyc jak sie to zachowuje w produkcji ;)
-
Wydaje mi się, że jeden produkt (id_product) może mieć tylko jednego producenta (id_manufacturer) tak jak jest w tabeli ps_product.
Moja wersja działa poprawnie, w sklepie testowym nie miałem zdefiniowanych producentów dla wszystkich produktów.
Muszę jeszcze popracować nad title dla producentów.
http://www.magic-bra.pl
-
query wyrzucilo mi 2 producentow dla jednego produktu, a że nie grzebie tylko w prescie to raczej jest to dla mnie naturalne ze mozna miec ten sam towar od kilku producentów ;) tak to jest jak się zagląda z doskoku.
z tego co widze problem jest spowodowany u mnie (instalka 1.1.8) tym ze czesc produktow nie ma przypisanych dostawcow i producentow (0 w polach w bazie) stąd query porównując 0 do ID producenta leży
po poprawnym przypisaniu wartosci i zmianie query (powrot do twojej ostatniej linii) wyniki dla ID 7 są poprawne
aby tego uniknąć należało by porównać odebrany wynik i jesli == 0 (producent nie przypisany) odpowiednio przetworzyc query, można też zrobić default w bazie nie 0 a załóżmy 1 i stworzyć pod 1 producenta noname ;)
-
No ta - bylem przeciez w tym sklepie ;) robilem rozowe tło ... hihi
Widze ze powyciągane na prostą. Tylko ten top 2 razy za wysoki ;P
Czyli ty jestes locodesign ? czy rozmawiam z dwiema osobami - jedną na GG drugą tutaj ?
-
Nie jestem locodesign, moje gg: 3061037. Też mi się wydaje, że top trochę za wysoki
-
a to tobie robilem rozowe tlo w miniaturkach, chyba nie - tyle ze sklep ten sam ;)
-
Nad tym tłem można by jeszcze trochę popracować ponieważ miniaturki wyświetlane są w kilku miejscach, a nie wszędzie jest ten sam odcień różowego tła.
Skończyłem już robić title dla produktów:
/* Products specifics meta tags */
if ($id_product = Tools::getValue('id_product'))
{
$row = Db::getInstance()->getRow('
SELECT distinct '._DB_PREFIX_.'product_lang.name as name, meta_title, meta_description, meta_keywords, description_short, '._DB_PREFIX_.'manufacturer.name as manufacturer
FROM '._DB_PREFIX_.'product_lang, '._DB_PREFIX_.'manufacturer, '._DB_PREFIX_.'product
WHERE '._DB_PREFIX_.'product_lang.id_lang = '.intval($id_lang).' AND '._DB_PREFIX_.'product_lang.id_product = '.intval($id_product).' AND
'._DB_PREFIX_.'product_lang.id_product='._DB_PREFIX_.'product.id_product AND
'._DB_PREFIX_.'manufacturer.id_manufacturer='._DB_PREFIX_.'product.id_manufacturer');
if ($row)
{
if (empty($row['meta_description']))
$row['meta_description'] = strip_tags($row['description_short']);
return self::completeMetaTags($row, $row['name'].' - '.$row['manufacturer']);
}
}
i producentów:
/* Manufacturers specifics meta tags */
elseif ($id_manufacturer = Tools::getValue('id_manufacturer'))
{
$row = Db::getInstance()->getRow('
SELECT `meta_title`, `meta_description`, `meta_keywords`, `name`
FROM `'._DB_PREFIX_.'manufacturer_lang`, `'._DB_PREFIX_.'manufacturer`
WHERE id_lang = '.intval($id_lang).' AND '._DB_PREFIX_.'manufacturer_lang.id_manufacturer = '.intval($id_manufacturer).' AND
'._DB_PREFIX_.'manufacturer_lang.id_manufacturer='._DB_PREFIX_.'manufacturer.id_manufacturer');
if ($row)
{
if (empty($row['meta_description']))
$row['meta_description'] = strip_tags($row['meta_description']);
return self::completeMetaTags($row, $row['name'].' '.$row['meta_title']);
}
}
-
to raczej trzeba popracowac nad css'ami bo miniaturki są jedne ;)
-
to ja mam takie pytanie :)
chce mieć taką kolejność w title :
NAZWA_PRODUKTU - TYTUL_STRONY
to co podal motorider u mnie nie dziala (presta 1.2.2pl)
proszę o wskazówki jak to zmienić
-
zamien linie 505 w pliku tools.php na następujacą:
$metaTags['meta_title'] = $defaultValue.' - '.Configuration::get('PS_SHOP_NAME');
-
Odświeżę temat i zwrócę uwagę na mały błąd w konfiguracji nowej presty aby ustawienie działało. A zarazem proszę o pomoc przy konstrukcji zapytania MySQL aby układ działał identycznie tylko że dla kategorii.
Zacznę od małego błędu aby wcześniejsza konfiguracja działała w Prescie 1.4.8.2
A więc po zapytaniu które wcześniej przedstawił kolega należy dodać taki wpis aby to działało:
if ($row)
{
if (empty($row['meta_description']))
$row['meta_description'] = strip_tags($row['description_short']);
if (!empty($row['meta_title']))
$row['meta_title'] = $title.$row['meta_title'].' - '.$row['manufacturer'];
return self::completeMetaTags($row, $row['name']);
}
}
Mnie interesuje identyczne rozwiązanie tylko że dla kategorii i mam problem z zapytaniem MySQL. Podejrzewam że błąd jest czysto czeski ale prosiłbym o pomoc kogoś kto zna MySQL by to poprawić. Otóż mam taki kod i to nie funkcjonuje tak jak bym chciał:
$row = Db::getInstance()->getRow('
SELECT distinct '._DB_PREFIX_.'product_lang.name as name, meta_title, meta_description, meta_keywords, description_short, '._DB_PREFIX_.'category_lang.name as category,
FROM '._DB_PREFIX_.'product_lang, '._DB_PREFIX_.'category_lang, '._DB_PREFIX_.'product
WHERE '._DB_PREFIX_.'product_lang.id_lang = '.intval($id_lang).' AND '._DB_PREFIX_.'product_lang.id_product = '.intval($id_product).' AND
'._DB_PREFIX_.'product_lang.id_product='._DB_PREFIX_.'product.id_product AND
'._DB_PREFIX_.'category_lang.id_category='._DB_PREFIX_.'product.id_category_default');
if ($row)
{
if (empty($row['meta_description']))
$row['meta_description'] = strip_tags($row['description_short']);
if (!empty($row['meta_title']))
$row['meta_title'] = $title.$row['meta_title'].' - '.$row['category'];
return self::completeMetaTags($row, $row['name']);