Jump to content

[SOLUCIONADO] Valores NLEFT y NRIGHT a 0


Recommended Posts

Buenos dias,

Desde que activamos la multitienda, cuando creamos categorias no lo hace bien, ya que genera la categoria con los valores Nleft y Nright a 0.

Llamo de manera manual a Category::regenerateEntireNtree(); , pero no hace nada...

Mi root category esta con valor "2"  y esta es e lcodigo que deberia generarlo , ¿Puede ser por el valor 2?:

 

 public static function regenerateEntireNtree()
            {
                       $id = Context::getContext()->shop->id;
                       $id_shop = $id ? $id: Configuration::get('PS_SHOP_DEFAULT');
                       $categories = Db::getInstance()->executeS('
                       SELECT c.`id_category`, c.`id_parent`
                       FROM `'._DB_PREFIX_.'category` c
                       LEFT JOIN `'._DB_PREFIX_.'category_shop` cs
                       ON (c.`id_category` = cs.`id_category` AND cs.`id_shop` = '.(int)$id_shop.')
                       ORDER BY c.`id_parent`, cs.`position` ASC');
                       $categories_array = array();
                       foreach ($categories as $category)
                                   $categories_array[$category['id_parent']]['subcategories'][] = $category['id_category'];
                       $n = 1;

                       if (isset($categories_array[0]) && $categories_array[0]['subcategories'])
                                   Category::_subTree($categories_array, $categories_array[0]['subcategories'][0], $n);
            }

            protected static function _subTree(&$categories, $id_category, &$n)
            {
                       $left = $n++;
                       if (isset($categories[(int)$id_category]['subcategories']))
                                   foreach ($categories[(int)$id_category]['subcategories'] as $id_subcategory)
                                               Category::_subTree($categories, (int)$id_subcategory, $n);
                       $right = (int)$n++;

                       Db::getInstance()->execute('
                       UPDATE '._DB_PREFIX_.'category
                       SET nleft = '.(int)$left.', nright = '.(int)$right.'
                       WHERE id_category = '.(int)$id_category.' LIMIT 1');
            }

 

 

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

if (isset($categories_array[0]) && $categories_array[0]['subcategories'])
   Category::_subTree($categories_array, $categories_array[0]['subcategories'][0], $n);

Una duda, esta mirando aqui que el Id_parent sea 0 y como no encuentra por eso falla?

Es que no tengo ningun id_category con valor 0, y creo que puede ser por eso..

Link to comment
Share on other sites

4 hours ago, Ecigarlife said:

if (isset($categories_array[0]) && $categories_array[0]['subcategories'])
   Category::_subTree($categories_array, $categories_array[0]['subcategories'][0], $n);

Una duda, esta mirando aqui que el Id_parent sea 0 y como no encuentra por eso falla?

Es que no tengo ningun id_category con valor 0, y creo que puede ser por eso..

no.

si el array "$catetegories_array" tiene la clave "0" definida y ademas dentro de ésta,
está la clave "subcategories" definida, haz lo siguiente:

Category::_subTree($categories_array, $categories_array[0]['subcategories'][0], $n);

 

traducido literalemnte seria esto, nada q ver con id_parent 0

Suerte

Edited by burrots (see edit history)
  • Like 1
Link to comment
Share on other sites

Buenos dias,

 

Consegui que se generara, os explico como lo hice por si a alguno le pasa en un futuro :

 

Me cree un archivo nuevo que puse en la raiz en la web llamada crearcategorias.php

El codigo de dicho archivo es el siguiente:

<?php

require(dirname(__FILE__).'/config/config.inc.php');
echo 'Regenerating tree...';
Category::regenerateEntireNtree();
echo 'done<br />';
echo 'Recalculating level depths...';
$category = new Category((int)Configuration::get('PS_ROOT_CATEGORY'));
$category->recalculateLevelDepth($category->id);
echo 'done';

Lo mas importante y que creo que es lo que ha hecho que funcione, ha sido borrar las caches a mano, reiniciar PHP en el hosting y despues ejecuto dicho codigo : www.tudominio.com/crearcategorias.php.

Debo decir que algo parecido o similar habia intentado dias antes y no me habia funcionado... pero ahora si lo ha cogido

 

 

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