Jump to content

Urls simplifiés comment modifier en masse les produits ?


Recommended Posts

bonjour à tous , 

je suis dans une galère monumentale ... Je reprend juste le SEO d'un qui tourne sur la version 1.6.0.9 de PS .

 

J'ai effectuer un crawl des URLS et je me trouve face a un problème.. Les URL été toutes dupliqués.

J'ai donc modifier les URLS des catégories et sous catégories manuellement ainsi que leurs titres.

Sauf que j'ai plus de 2000 produits et autant dire que manuellement c'est du suicide ...

 

 

Comment modifier en masse pour que dans l'URL il intègre le nom du produit ? 

 

Merci

 

Link to comment
Share on other sites

Bonjour,

 

Vous pouvez essayer de faire un petit script en php qui sélectionnerait tout les produits en base et les bouclerait un à un pour régénérer l'url sur la base du nom produit et de la référence par exemple, puis l'enregistrerait en base.

Il faudra également que votre script prenne en compte le multi-boutique (si activé) et les langues (si plusieurs).

 

Cordialement.

Link to comment
Share on other sites

  • 1 month later...
  • 9 years later...

Vous pouvez essayer ce script :
ps-urls-refresh.php

<?php

/* 
 * Rebuild SEO-friendly product slugs (link_rewrite) for all languages & shops
 * ajuster les urls SEO dans Prestashop
 */

require(dirname(__FILE__).'/../../config/config.inc.php');
$Context = Context::getContext();
$token = Tools::getValue('token');

$Context = Context::getContext();
$products_updated = 0;
$langs = LanguageCore::getLanguages(false);

foreach($langs as $lang){
    
    $sql = 'SELECT * FROM '._DB_PREFIX_.'product p
            LEFT JOIN `'._DB_PREFIX_.'product_lang` pl ON (p.`id_product` = pl.`id_product`)
            WHERE pl.`id_lang`="'.pSQL($lang['id_lang']).'"';

    $products = Db::getInstance()->ExecuteS($sql);
    
    foreach($products as $p){
        $Product = new Product($p['id_product'],false,$lang['id_lang']);
        $sql = 'UPDATE '._DB_PREFIX_.'product_lang pl SET `link_rewrite`="'.pSQL(Tools::str2url($Product->name)).'"
                WHERE 
                pl.`id_product`="'.pSQL($p['id_product']).'" AND
                pl.`id_lang`="'.pSQL($lang['id_lang']).'"';
                echo $sql.'<br/>';
        Db::getInstance()->Execute($sql);
        $products_updated++;  
    }
    
}

echo '<strong>Nbre urls produits mis à jour : '.$products_updated/count($langs).'</strong>';
    

accéder au fichier pour lancer le script via cron ou lien direct

Link to comment
Share on other sites

Dans PrestaShop, chaque produit dispose d'un champ link_rewrite dans le tableau ps_product_lang – celui-ci est responsable du fragment de l'URL. Il est donc possible de créer un script PHP simple qui mettra à jour en masse les URL en fonction des noms des produits.

Voici un exemple ci-dessous:

 

<?php
// config PrestaShop
include(dirname(__FILE__).'/config/config.inc.php');
include(dirname(__FILE__).'/init.php');

// Pobieramy wszystkie produkty
$sql = "SELECT id_product, id_lang, name FROM "._DB_PREFIX_."product_lang";
$products = Db::getInstance()->executeS($sql);

foreach ($products as $product) {
    $id_product = (int)$product['id_product'];
    $id_lang = (int)$product['id_lang'];
    $name = $product['name'];

    // Tworzymy slug (przyjazny URL)
    $link_rewrite = Tools::link_rewrite($name);

    // Aktualizacja w bazie
    Db::getInstance()->update(
        'product_lang',
        ['link_rewrite' => pSQL($link_rewrite)],
        "id_product = $id_product AND id_lang = $id_lang"
    );

    echo "Zaktualizowano produkt $id_product : $link_rewrite<br>";
}

echo "Gotowe!";

 

Comment l'utiliser ?

  • Téléchargez le fichier, par exemple update_urls.php, dans le répertoire principal de PrestaShop.
  • Lancez-le dans votre navigateur: http://twoj-sklep.pl/update_urls.php.
  • Le script parcourra tous les produits et définira des URL conviviales en fonction des noms.

 

Remarques importantes :

  • Effectuez une sauvegarde de la base de données avant de lancer le script.
  • Si vous avez plusieurs langues, link_rewrite sera défini séparément pour chaque id_lang.
  • Une fois l'opération terminée, il est recommandé de vider le cache dans PrestaShop et, éventuellement, de reconstruire le plan du site.
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...