Jump to content

Actualizar Prestashop 1.6.1.6 y Error fatal : el nivel de acceso a Link :: getBaseLink () debe ser público (como en la clase LinkCore) en /var/www/vhosts/miweb.com/httpdocs/override/classes/Link.php en la línea 0


Recommended Posts

Buenas tardes, 

HAce un buen rato he intentado actualizar mi prestahop 1.6.1.6 y en el backoffice me ha dado todo ok, pero cuando he intentado entrar en la web y en el backoffice me da error.

Activando el bug de errores me da esto:

Error fatal : el nivel de acceso a Link :: getBaseLink () debe ser público (como en la clase LinkCore) en /var/www/vhosts/miweb.com/httpdocs/override/classes/Link.php en la línea 0

¿Cómo podría solucionarlo?

No puedo entrar ni el Backoffice ni en la web. Graicas de antemano compañeros.

Link to comment
Share on other sites

Tienes un error en este "override": /override/classes/Link.php 

Override proveniente de algún módulo que tuvieras instalado. Renombrarlo momentáneamente "link.php_old" y mira ver de donde viene.

¿Es posible que antes de actualizar tuvieras algún módulo instalado como el CleanURL para ocultar el ID de las urls amigables?

Link to comment
Share on other sites

32 minutes ago, nadie said:

Tienes un error en este "override": /override/classes/Link.php 

Override proveniente de algún módulo que tuvieras instalado. Renombrarlo momentáneamente "link.php_old" y mira ver de donde viene.

¿Es posible que antes de actualizar tuvieras algún módulo instalado como el CleanURL para ocultar el ID de las urls amigables?

 

Buenas tardes Nadie, 

Efectivamente, tengo un módulo para limpiar las URLS GoodBid - Elimina el ID de la URL v3.0.11 - por AlabazWeb Pro  pero no sé si es este módulo el que me da el error,

Que me aconsejas? Como lo puedo solucionar?

Gracias de antemano!!

 

Link to comment
Share on other sites

4 minutes ago, Sergio Ruiz said:

Me cuelo, que contenido tienes en el fichero: /override/classes/Link.php ?

Posiblemente sea un override del modulo que dices, probaria desactivar el modulo o desinstalarlo a ver si tienes suerte y te deja acceder.

 

Buenas tardes SErgio, Te pego lo que tiene mi archivo Link.php

Graicas por tu atención también!!

 

<?php

class Link extends LinkCore
{
    protected function getLangLink($id_lang = null, Context $context = null, $id_shop = null)
    {
        if (Configuration::get("GB_RM_LANG_URL"))
            return '';
        
        return parent::getLangLink($id_lang, $context, $id_shop);
    }
    
    /**
     * Create a link to a category
     *
     * @param mixed $category Category object (can be an ID category, but deprecated)
     * @param string $alias
     * @param int $id_lang
     * @param string $selected_filters Url parameter to autocheck filters of the module blocklayered
     * @return string
     */
    public function getCategoryLink($category, $alias = null, $id_lang = null, $selected_filters = null, $id_shop = null, $relative_protocol = false)
    {
        if (!$id_lang) {
            $id_lang = Context::getContext()->language->id;
        }

        $url = $this->getBaseLink($id_shop, null, $relative_protocol).$this->getLangLink($id_lang, null, $id_shop);

        if (!is_object($category)) {
            $category = new Category($category, $id_lang);
        }

        // Set available keywords
        $params = array();
        $params['id'] = $category->id;
        $params['rewrite'] = (!$alias) ? $category->link_rewrite : $alias;
        $params['meta_keywords'] =    Tools::str2url($category->getFieldByLang('meta_keywords'));
        $params['meta_title'] = Tools::str2url($category->getFieldByLang('meta_title'));

        $dispatcher = Dispatcher::getInstance();
        if ($dispatcher->hasKeyword('category_rule', $id_lang, 'categories', $id_shop)) {            
            /*$params['category'] = $category;
             $cats = array();
             foreach ($category->getParents($id_lang) as $cat) {
             if (!in_array($cat['id_category'], Link::$category_disable_rewrite)) {
             //remove root and home category from the URL
             $cats[] = $cat['link_rewrite'];
             }
             }
             $params['categories'] = implode('/', $cats);*/
            $cats = array();
            foreach ($category->getParentsCategories() as $cat)
                if (!in_array($cat['id_category'], array(1, 2, $category->id)))//remove root, home and current category from the URL
                $cats[] = $cat['link_rewrite'];
                $params['categories'] = implode('/', array_reverse($cats));
        }
        
        // Selected filters is used by the module blocklayered
        $selected_filters = is_null($selected_filters) ? '' : $selected_filters;

        if (empty($selected_filters)) {
            $rule = 'category_rule';
        } else {
            $rule = 'layered_rule';
            $params['selected_filters'] = $selected_filters;
        }

        return $url.Dispatcher::getInstance()->createUrl($rule, $id_lang, $params, $this->allow, '', $id_shop);
    }
    
    protected function getBaseLink($id_shop = null, $ssl = null, $relative_protocol = false)
    {
        static $force_ssl = null;
    
        if ($ssl === null) {
            if ($force_ssl === null) {
                $force_ssl = (Configuration::get('PS_SSL_ENABLED') && Configuration::get('PS_SSL_ENABLED_EVERYWHERE'));
            }
            $ssl = $force_ssl;
        }
    
        if (Configuration::get('PS_MULTISHOP_FEATURE_ACTIVE') && $id_shop !== null) {
            $shop = new Shop($id_shop);
        } else {
            $shop = Context::getContext()->shop;
        }
    
        if ($relative_protocol) {
            $base = '//'.($ssl && $this->ssl_enable ? $shop->domain_ssl : $shop->domain);
        } else {
            $base = (($ssl && $this->ssl_enable) ? 'https://'.$shop->domain_ssl : 'http://'.$shop->domain);
        }
    
        return $base.$shop->getBaseURI();
    }
}

Link to comment
Share on other sites

Entra en la carpeta del modulo, un momento, es decir:

 

/modules/nombre_modules/

 

y dime si dentro de la carpeta del modulo tienes otra carpeta llamada override con un fichero que tiene el mismo contenido al que me has pasado.

De ese modo, sabemos si ese override proviene u no de ese modulo

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

3 minutes ago, Sergio Ruiz said:

Entra en la carpeta del modulo, un momento, es decir:

 

/modules/nombre_modules/

 

y dime si dentro de la carpeta del modulo tienes otra carpeta llamada override con un fichero que tiene el mismo contenido al que me has pasado.

De ese modo, sabemos si ese override proviene u no de ese modulo

 

Efectivamente, dentro del módulo he encontrado esta carpeta: modules/goodbid/_override/classes/Link.php con el siguiente contenido:

<?php

class Link extends LinkCore
{
    protected function getLangLink($id_lang = null, Context $context = null, $id_shop = null)
    {
        if (Configuration::get("GB_RM_LANG_URL"))
            return '';
        
        return parent::getLangLink($id_lang, $context, $id_shop);
    }
    
    /**
     * Create a link to a category
     *
     * @param mixed $category Category object (can be an ID category, but deprecated)
     * @param string $alias
     * @param int $id_lang
     * @param string $selected_filters Url parameter to autocheck filters of the module blocklayered
     * @return string
     */
    public function getCategoryLink($category, $alias = null, $id_lang = null, $selected_filters = null, $id_shop = null, $relative_protocol = false)
    {
        if (!$id_lang) {
            $id_lang = Context::getContext()->language->id;
        }

        $url = $this->getBaseLink($id_shop, null, $relative_protocol).$this->getLangLink($id_lang, null, $id_shop);

        if (!is_object($category)) {
            $category = new Category($category, $id_lang);
        }

        // Set available keywords
        $params = array();
        $params['id'] = $category->id;
        $params['rewrite'] = (!$alias) ? $category->link_rewrite : $alias;
        $params['meta_keywords'] =    Tools::str2url($category->getFieldByLang('meta_keywords'));
        $params['meta_title'] = Tools::str2url($category->getFieldByLang('meta_title'));

        $dispatcher = Dispatcher::getInstance();
        if ($dispatcher->hasKeyword('category_rule', $id_lang, 'categories', $id_shop)) {            
            /*$params['category'] = $category;
             $cats = array();
             foreach ($category->getParents($id_lang) as $cat) {
             if (!in_array($cat['id_category'], Link::$category_disable_rewrite)) {
             //remove root and home category from the URL
             $cats[] = $cat['link_rewrite'];
             }
             }
             $params['categories'] = implode('/', $cats);*/
            $cats = array();
            foreach ($category->getParentsCategories() as $cat)
                if (!in_array($cat['id_category'], array(1, 2, $category->id)))//remove root, home and current category from the URL
                $cats[] = $cat['link_rewrite'];
                $params['categories'] = implode('/', array_reverse($cats));
        }
        
        // Selected filters is used by the module blocklayered
        $selected_filters = is_null($selected_filters) ? '' : $selected_filters;

        if (empty($selected_filters)) {
            $rule = 'category_rule';
        } else {
            $rule = 'layered_rule';
            $params['selected_filters'] = $selected_filters;
        }

        return $url.Dispatcher::getInstance()->createUrl($rule, $id_lang, $params, $this->allow, '', $id_shop);
    }
    
    protected function getBaseLink($id_shop = null, $ssl = null, $relative_protocol = false)
    {
        static $force_ssl = null;
    
        if ($ssl === null) {
            if ($force_ssl === null) {
                $force_ssl = (Configuration::get('PS_SSL_ENABLED') && Configuration::get('PS_SSL_ENABLED_EVERYWHERE'));
            }
            $ssl = $force_ssl;
        }
    
        if (Configuration::get('PS_MULTISHOP_FEATURE_ACTIVE') && $id_shop !== null) {
            $shop = new Shop($id_shop);
        } else {
            $shop = Context::getContext()->shop;
        }
    
        if ($relative_protocol) {
            $base = '//'.($ssl && $this->ssl_enable ? $shop->domain_ssl : $shop->domain);
        } else {
            $base = (($ssl && $this->ssl_enable) ? 'https://'.$shop->domain_ssl : 'http://'.$shop->domain);
        }
    
        return $base.$shop->getBaseURI();
    }
}

 

Gracias nuevamente!!!

 

Link to comment
Share on other sites

Desinstala el módulo que comentas de AlabazWeb, ya que el override parece provenir por lo que estoy leyendo del mismo.

No se de que versión a que versión has actualizado de Prestashop, pero el override no parece funcionar correctamente, por lo que:

1º Desinstala el módulo
2º Verifica que se han eliminado los overrides al desinstalar el modulo. El módulo te instala varias overrides, normalmente al desinstalarlo se suelen eliminar, pero nunca esta de mal, revisar.
3º Contacta con Alabaz Web que parece que es la empresa a la que le has comprado el módulo, comentales el problema y que te lo miren.

El error dice -> la función "  function getBaseLink" (originalmente) viene como publica (public), no como "protected".  Puedes probar cambiar:

    protected function getBaseLink($id_shop = null, $ssl = null, $relative_protocol = false)
por

    public function getBaseLink($id_shop = null, $ssl = null, $relative_protocol = false)


Pero supongo que el modulo al no estar actualizado tendrá algún problemilla más, lo mejor es que contactes con alabaz

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

2 minutes ago, nadie said:

Desinstala el módulo que comentas de AlabazWeb, ya que el override parece provenir por lo que estoy leyendo del mismo.

No se de que versión a que versión has actualizado de Prestashop, pero el override no parece funcionar correctamente, por lo que:

1º Desinstala el módulo
2º Verifica que se han eliminado los overrides al desinstalar el modulo. El módulo te instala varias overrides, normalmente al desinstalarlo se suelen eliminar, pero nunca esta de mal, revisar.
3º Contacta con Alabaz Web que parece que es la empresa a la que le has comprado el módulo, comentales el problema y que te lo miren.

El error dice -> la función "  function getBaseLink" (originalmente) viene como publica (public), no como "protected".  Puedes probar cambiar:

    protected function getBaseLink($id_shop = null, $ssl = null, $relative_protocol = false)
por

    public function getBaseLink($id_shop = null, $ssl = null, $relative_protocol = false)


Pero supongo que el modulo al no estar actualizado tendrá algún problemilla más, lo mejor es que contactes con alabaz

 

Gracias NAdie!!

He tenido que reinstalar por FTP todos los archivos porqe la web lleva caía desde las 13:00 horas y son muchas horas sin estar online.

He tomado nota de todo para comentarlo a Alabazweb, a ver si encuentran solución.

Un millón de gracias y no dejo el tiquet del todo cerrado hasta que no me contesten y encontremos solución, por si a algún compañero le ocurriese lo mismo teniendo el mismo módulo.

Gracias Nadie y Sergio Ruiz!!

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...