Jump to content

Απενεργοποίηση Friendly URL's μόνο για τις εικόνες προϊόντων (SOLVED)


Recommended Posts

Θέλω να επενεργοποιήσω τα Friendly URL's μόνο για τις εικόνες προϊόντων και όχι για όλο το υπόλοιπο eshop.
Γιατί το URL των φωτογραφιών τώρα είναι αυτής της μορφής
/471/product_name.jpg
/466/product_name.jpg
/479/product_name.jpg
Είναι σαν να έχουν δηλαδή το ίδιο filename.

Ενώ εγώ θέλω το πραγματικό URL όπως είναι όταν δεν είναι ενεργοποιημένo τα Friendly URL's του Prestashop

Βρήκα πως αυτό γίνετε στα classes/Link.php

Για παράδειγμα κάποιος μπόρεσε να το επενεργοποιήσει για τις category images ενώ δείνει και ένα Link απο κάποιον που το απενεργοποίησε και απο τα product images αλλά είναι απο παλαιότερη έκδοση prestashop.

 

Στα overide/classes στην εγκατάστασή μου υπάρχει ήδη  ένα Link.php το παρακάτω ίσως λόγο του super speed cache module Που έχω εγκαταστήσει. Κάποιος που γνωρίζει καλύτερα τον κώδικα του prestashop μπορεί να βοηθήσει παρακαλώ να κάνω comment τις γραμμές που πρέπει?
 

class Link extends LinkCore
{
    /*
    * module: ets_superspeed
    * date: 2022-08-23 14:27:26
    * version: 1.5.5
    */
    public function getImageLink($name, $ids, $type = null)
    {
        $notDefault = false;
        if (version_compare(_PS_VERSION_, '1.7', '>=')) {
            $moduleManagerBuilder = PrestaShop\PrestaShop\Core\Addon\Module\ModuleManagerBuilder::getInstance();
            $moduleManager = $moduleManagerBuilder->build();
            static $watermarkLogged = null;
            static $watermarkHash = null;
            static $psLegacyImages = null;
            if ($watermarkLogged === null) {
                $watermarkLogged = Configuration::get('WATERMARK_LOGGED');
                $watermarkHash = Configuration::get('WATERMARK_HASH');
                $psLegacyImages = Configuration::get('PS_LEGACY_IMAGES');
            }
            if (!empty($type) && $watermarkLogged &&
                ($moduleManager->isInstalled('watermark') && $moduleManager->isEnabled('watermark')) &&
                isset(Context::getContext()->customer->id)
            ) {
                $type .= '-' . $watermarkHash;
            }
        }
        else
        {
            if (($type != '') && Configuration::get('WATERMARK_LOGGED') && (Module::isInstalled('watermark') && Module::isEnabled('watermark')) && isset(Context::getContext()->customer->id)) {
                $type .= '-'.Configuration::get('WATERMARK_HASH');
            }
            $psLegacyImages =Configuration::get('PS_LEGACY_IMAGES');
        }    
        $is_webp = false;
        $theme = ((Shop::isFeatureActive() && file_exists(_PS_PROD_IMG_DIR_ . $ids . ($type ? '-' . $type : '') . '-' . Context::getContext()->shop->theme_name . '.jpg')) ? '-' . Context::getContext()->shop->theme_name : '');
        if (($psLegacyImages
                && (file_exists(_PS_PROD_IMG_DIR_ . $ids . ($type ? '-' . $type : '') . $theme . '.jpg')))
            || ($notDefault = strpos($ids, 'default') !== false)) {
            if ($this->allow == 1 && !$notDefault) {
                $uriPath = __PS_BASE_URI__ . $ids . ($type ? '-' . $type : '') . $theme . '/' . $name . '.jpg';
            } else {
                $uriPath = _THEME_PROD_DIR_ . $ids . ($type ? '-' . $type : '') . $theme . '.jpg';
            }
            if(file_exists(_PS_PROD_IMG_DIR_ . $ids . ($type ? '-' . $type : '')  . '.webp'))
                $is_webp = true;
        } else {
            $splitIds = explode('-', $ids);
            $idImage = (isset($splitIds[1]) ? $splitIds[1] : $splitIds[0]);
            $theme = ((Shop::isFeatureActive() && file_exists(_PS_PROD_IMG_DIR_ . Image::getImgFolderStatic($idImage) . $idImage . ($type ? '-' . $type : '') . '-' . (int) Context::getContext()->shop->theme_name . '.jpg')) ? '-' . Context::getContext()->shop->theme_name : '');
            if ($this->allow == 1) {
                $uriPath = __PS_BASE_URI__ . $idImage . ($type ? '-' . $type : '') . $theme . '/' . $name . '.jpg';
            } else {
                $uriPath = _THEME_PROD_DIR_ . Image::getImgFolderStatic($idImage) . $idImage . ($type ? '-' . $type : '') . $theme . '.jpg';
            }
            if(file_exists(_PS_PROD_IMG_DIR_ . Image::getImgFolderStatic($idImage) . $idImage . ($type ? '-' . $type : '') . '.webp'))
                $is_webp = true;
        }
        if($is_webp)
        {
            $url = $this->protocol_content . Tools::getMediaServer($uriPath) . $uriPath;
            return str_replace('.jpg','.webp',$url);
        }
        else
            return $this->protocol_content . Tools::getMediaServer($uriPath) . $uriPath;
    }
}




 

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

13 hours ago, Prestan0ob said:

Θέλω να επενεργοποιήσω τα Friendly URL's μόνο για τις εικόνες προϊόντων και όχι για όλο το υπόλοιπο eshop.

Γιατί θέλεις να το κάνεις αυτό? Δεν προτείνετε...

13 hours ago, Prestan0ob said:

Γιατί το URL των φωτογραφιών τώρα είναι αυτής της μορφής
/471/product_name.jpg
/466/product_name.jpg
/479/product_name.jpg
Είναι σαν να έχουν δηλαδή το ίδιο filename.

και τι μορφή θέλεις να έχει? αυτή που έχει τον δίσκο? πχ για το /471/product_name.jpg θα είναι /img/p/4/7/1/471.jpg

 

Στο htaccess δες πρώτα. Εκεί γίνετε το rewrite.

Link to comment
Share on other sites

1 hour ago, sanctusmob said:

Γιατί θέλεις να το κάνεις αυτό? Δεν προτείνετε...

και τι μορφή θέλεις να έχει? αυτή που έχει τον δίσκο? πχ για το /471/product_name.jpg θα είναι /img/p/4/7/1/471.jpg

 

Στο htaccess δες πρώτα. Εκεί γίνετε το rewrite.

Δεν με ενδιαφέρει το SEO του συγκεκριμένου eshop αλλά και το google δίνει σημασία στις ονομασίες των φωτογραφιών απο ελάχιστα εως και καθόλου.

Κάνω export τα προϊόντα σε XML, CSV και εκεί που γίνονται Import εαν έχουν το ίδιο όνομα υπερκαλύπτει η μια την άλλη και έτσι στην ουσία εαν έχει 10 φωτογραφίες εμφανίζονται και οι 10 ίδιες.

Θέλω ακριβώς όπως γράφεις, την μορφή που έχει στον δίσκο. Δηλαδή την μορφή που έχει πριν ενεργοποιήσει κάποιος τα Friendly URL του Prestashop.
 

Δεν αρκεί μόνο η αλλαγή στο htaccess, πρέπει να αλλάξει και το classes/Link.php όπως ακριβώς έκανε ο φίλος μας παρακάτω αλλά σε prestashop 1.6 νομίζω όχι σε 1.7.
 

 

Link to comment
Share on other sites

Ok το βρήκα ποια γραμμή δημιουργεί το friendly URL των εικόνων μέσα στο classes/Link.php

 

 if ($this->allow == 1) {
                $uriPath = __PS_BASE_URI__ . $idImage . ($type ? '-' . $type : '') . $theme . '/' . $name . '.jpg';
            } else {
                $uriPath = _THEME_PROD_DIR_ . Image::getImgFolderStatic($idImage) . $idImage . ($type ? '-' . $type : '') . $theme . '.jpg';


Οπότε άλλαξα το εξής

απο if ($this->allow == 1)

σε if ($this->allow == 1 && false)

 

(SOLVED)

 

Link to comment
Share on other sites

  • Prestan0ob changed the title to Απενεργοποίηση Friendly URL's μόνο για τις εικόνες προϊόντων (SOLVED)

Μπορείς να μην απενεργοποιήσεις τίποτα και απλός από το id της εικόνας να παράγεις το path /img/p/4/7/1/471.jpg

μπορείς να αφήσεις και αυτή την μορφή

/471/product_name.jpg , μπορείς να έχεις και thumbs /471-large_default/product_name.jpg

και όπου product_name μπορείς να βάλεις ότι γουστάρεις... θα παίξει.

Δηλαδή στο xml μπορείς να γράφεις

/471/1.jpg ή /471/Image_1.jpg ή /471/δεν_έχει_σημασία_τι_γράφει_εδώ_1.jpg
/466/2.jpg ή /466/Image_2.jpg ή /466/δεν_έχει_σημασία_τι_γράφει_εδώ_2.jpg
/479/3.jpg ή /479/Image_3.jpg ή /479/δεν_έχει_σημασία_τι_γράφει_εδώ_3.jpg

π.χ. με βάση το image order

όλα τα παραπάνω είναι valid url και δεν κάνουν redirect.

  • Like 1
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...