Polskie wsparcie PrestaShop

PrestaShop => Konfiguracja => Wątek zaczęty przez: motorider w Październik 19, 2009, 12:07:16 am

Tytuł: zmiana title
Wiadomość wysłana 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?
Tytuł: Odp: zmiana title
Wiadomość wysłana przez: kuras w Październik 19, 2009, 09:06:54 am
Nie pomogę ci niestety.... ale pamiętam że szukałem rozwiązania i znalazłem na forum prestashop.com... i go nie zastosowałem ;-]
Tytuł: Odp: zmiana title
Wiadomość wysłana przez: motorider w Październik 19, 2009, 11:44:08 am
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.
Tytuł: Odp: zmiana title
Wiadomość wysłana przez: Paweł Sokołowski w Październik 19, 2009, 03:23:54 pm
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 ;)
Tytuł: Odp: zmiana title
Wiadomość wysłana przez: motorider w Październik 19, 2009, 07:51:45 pm
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?
Tytuł: Odp: zmiana title
Wiadomość wysłana przez: Paweł Sokołowski w Październik 19, 2009, 08:32:47 pm
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']);
Tytuł: Odp: zmiana title
Wiadomość wysłana przez: Paweł Sokołowski w Październik 19, 2009, 10:10:40 pm
wrzuc query jak zrobisz, tam bedzie ze 3-4 table do join - ciekawe jestem jak to wyjdzie ;)
Tytuł: Odp: zmiana title
Wiadomość wysłana przez: motorider w Październik 22, 2009, 12:52:17 am
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
Tytuł: Odp: zmiana title
Wiadomość wysłana przez: Paweł Sokołowski w Październik 22, 2009, 03:53:15 pm
nie moge sie teraz tym zająć mam spoznione deadline - jak do przyszlego tyg nic nie wymyslisz - postaram sie wrzucic to na tapete ;)
Tytuł: Odp: zmiana title
Wiadomość wysłana przez: motorider w Październik 29, 2009, 12:10:48 am
Minął już ponad tydzień, ale nadal nie doszukałem się błędu w moim zapytaniu SQL.
Tytuł: Odp: zmiana title
Wiadomość wysłana przez: Paweł Sokołowski w Październik 29, 2009, 09:55:10 am
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
Tytuł: Odp: zmiana title
Wiadomość wysłana przez: motorider w Październik 29, 2009, 11:20:28 am
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?
Tytuł: Odp: zmiana title
Wiadomość wysłana przez: Paweł Sokołowski w Październik 29, 2009, 11:25:04 am
mozesz miec przypisanych kilku producentow do produktu i to w sumie jest wazne - wariant czy tam artybut to juz bez znaczenia ;)
Tytuł: Odp: zmiana title
Wiadomość wysłana przez: scholl w Październik 29, 2009, 11:25:47 am
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
Tytuł: Odp: zmiana title
Wiadomość wysłana przez: Paweł Sokołowski w Październik 29, 2009, 11:39:23 am
Rider jak zrobisz daj link - chcialbym zobaczyc jak sie to zachowuje w produkcji ;)
Tytuł: Odp: zmiana title
Wiadomość wysłana przez: motorider w Październik 29, 2009, 11:43:52 am
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
Tytuł: Odp: zmiana title
Wiadomość wysłana przez: Paweł Sokołowski w Październik 29, 2009, 12:01:53 pm
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 ;)
Tytuł: Odp: zmiana title
Wiadomość wysłana przez: Paweł Sokołowski w Październik 29, 2009, 12:08:46 pm
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 ?
Tytuł: Odp: zmiana title
Wiadomość wysłana przez: motorider w Październik 29, 2009, 12:15:20 pm
Nie jestem locodesign, moje gg: 3061037. Też mi się wydaje, że top trochę za wysoki
Tytuł: Odp: zmiana title
Wiadomość wysłana przez: Paweł Sokołowski w Październik 29, 2009, 12:20:53 pm
a to tobie robilem rozowe tlo w miniaturkach, chyba nie - tyle ze sklep ten sam ;)
Tytuł: Odp: zmiana title
Wiadomość wysłana przez: motorider w Październik 29, 2009, 12:27:00 pm
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']);
}
}
Tytuł: Odp: zmiana title
Wiadomość wysłana przez: Paweł Sokołowski w Październik 29, 2009, 12:29:34 pm
to raczej trzeba popracowac nad css'ami bo miniaturki są jedne ;)
Tytuł: Odp: zmiana title
Wiadomość wysłana przez: qbeczek w Październik 30, 2009, 04:59:40 pm
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ć
Tytuł: Odp: zmiana title
Wiadomość wysłana przez: Paweł Sokołowski w Październik 30, 2009, 05:03:28 pm
zamien linie 505 w pliku tools.php na następujacą:

$metaTags['meta_title'] = $defaultValue.' - '.Configuration::get('PS_SHOP_NAME');
Tytuł: Odp: zmiana title
Wiadomość wysłana przez: pavoo w Sierpień 29, 2012, 08:21:28 pm
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']);