Jump to content
  • 0

Zmiana adresu URL zdjęć produktów na bardziej przyjazne SEO


hakeryk2

Question

Problem: wgrane zdjęcia produktów posiadają swój adres oraz nazwę w przykładowej postaci https://twojastrona.pl/12345-rozmiar-miniatury/nazwa_produktu.jpg

Pragnienie: Jeśli zdjęcie posiada alt/legendę czyli opis to niech ten opis będzie finalną nazwą produktu potraktowaną tak by była nazwą pliku. Jeśli nie ma takowego niech domyślnie posiada nazwę produktu.

Przykład: Produkt posiada zdjęcie z podpisem "koty LIŻO masło" więc jego  zdjęcie winno mieć url https://twojastrona.pl/12346-rozmiar-miniatury/koty-lizo-maslo.jpg

Rozwiązanie: Brak.

Nagroda: Pieśni o śmiałku będącym gotów poświęcić swe wolne zasoby czasowe by nieść pomoc i ukojenie tym, którzy jej potrzebują.

Link to comment
Share on other sites

6 answers to this question

Recommended Posts

  • 0

Może w ten sposób (PS 1.6):

W jakimś override (może być w Product lub Link)

    public static function getImageLinkRewrite($ids) {
        
        if (Configuration::get('PS_LEGACY_IMAGES')) {
            $id_image = $ids;
        } else {
            $split_ids = explode('-', $ids);
            $id_image = (isset($split_ids[1]) ? $split_ids[1] : $split_ids[0]);
        }
        
        $sql = '            
            SELECT
                il.`legend`
                
            FROM
                `'._DB_PREFIX_.'image` i
            '.Shop::addSqlAssociation('image', 'i').'
                
            LEFT JOIN
                `'._DB_PREFIX_.'image_lang` il
            ON
                (i.`id_image` = il.`id_image` AND il.`id_lang` = '.(int)Context::getContext()->language->id.' )
                
            WHERE
                i.`id_image` = '.(int)$id_image;
        
        $image_legend =  Db::getInstance()->getValue($sql);
                
        return (trim($image_legend) ? Tools::link_rewrite($image_legend) : false);
    }

    
    
    
W szablonach

product-list.tpl

{assign var='image_link_rewrite' value=OverrideClass::getImageLinkRewrite($product.id_image)}
                            
{if !$image_link_rewrite}
    {assign var='image_link_rewrite' value=$product.link_rewrite}
{/if}


<img class="replace-2x img-responsive" src="{$link->getImageLink($image_link_rewrite, $product.id_image, 'home_default')|escape:'html':'UTF-8'}" alt="{if !empty($product.legend)}{$product.legend|escape:'html':'UTF-8'}{else}{$product.name|escape:'html':'UTF-8'}{/if}" title="{if !empty($product.legend)}{$product.legend|escape:'html':'UTF-8'}{else}{$product.name|escape:'html':'UTF-8'}{/if}" {if isset($homeSize)} width="{$homeSize.width}" height="{$homeSize.height}"{/if} itemprop="image" />

 

W innych szablonach pewnie będzie podobnie.

Przetestuj

  • Thanks 1
Link to comment
Share on other sites

  • 0

No właśnie też o tym myślałem, jednak obawiam się, że gdzieś czasami moze się coś zapomnieć zmienić i nagle będę miał w google 2 zdjęcia o tej samej treści a innych nazwach bo jedno zostało zmienione a drugie było domyślne. Szukam rozwiązania stałego :) Ogólnie szukam i grzebię teraz, jak znajdę to dam znać ale każda pomoc mile widziana.

Link to comment
Share on other sites

  • 0

Jeszcze nie wprowadzam bo na Twoje rozwiązanie też wpadłem, tylko zastanawiałem się wciąż jak to ogarnąć by całkowicie przerobić overridem funkcję getImageLink by po nawet jeśli jest pierwszy parametr to wtedy wyszukała legendę i ją podała a jak nie to parametr i wtedy byłoby najmniej kolizyjnie, ponieważ getImageLink jest używany w ogromie plików :) Dam znać co wykiełbaszę i dzięki za wskazówki.

Link to comment
Share on other sites

  • 0

public function getImageLink($name, $ids, $type = null) {
    
    $legend = $this->getImageLinkRewrite($ids);
    
    
    return parent::getImageLink($legend ? $legend : $name, $ids, $type);
    
}

 

nie testowalem

  • Thanks 1
Link to comment
Share on other sites

  • 0

Zmiana poszła następująco :) Do Link.php override wgrałem Twoją funkcję getImageLinkRewrite, a następnie w public static getImageLink zrobiłem coś takiego:
 

public function getImageLink($name, $ids, $type = null, $rollover = null)
    {
        $not_default = false;

        $legend = $this->getImageLinkRewrite($ids);
        $name = ($legend) ? $legend : $name;
.... // dalsza część kodu

I pięknie ładnie przepisuje nazwy :) Dzięki w szczególności za funkcję do nazwy, musiałbym pisać sam i ślęczyć a tak to na gotowe :) Dzięki! Nie powinno być problemu z Googlem bo tak jak Daresh wspomniał plik się otworzy tak czy siak więc google sukcesywanie podmieni URL.

Aha zapomniałbym, jest i pieśń:

 

Quote

 

♫ Kto pod wodą ananasowy ma domek? ♫

♪♪ PAN PROGRAMISTA ATOMEK ♪♪

 



 

Edited by hakeryk2 (see edit history)
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...