Jump to content

Edit History

Manuel_GT

Manuel_GT

Hola @ExpertoPrestaShop y @rhhotelsupply

Por desgracia mi versión de Prestashop (8.1.7) debe ser distinta de la tuya porque en la posición 636 no tengo ese código.....yo lo tengo en 660

        if ($product['id_product_attribute']) {
            // Displayed only if all combinations are out of stock (stock is <= 0)
            $product = new Product((int) $product['id_product']);
            if (empty($product->id)) {
                return false;
            }

            foreach ($product->getAttributesResume($this->language->getId()) as $combination) {
                if ($combination['quantity'] > 0) {
                    return false;
                }
            }
        } elseif ($product['quantity'] > 0) {
            // Displayed only if the product stock is <= 0
            return false;
        }

Es raro que la sugerencia de @ExpertoPrestaShop no funcione.

        if ($product['id_product_attribute']) {
            // Displayed only if all combinations are out of stock (stock is <= 0)
            $product = new Product((int) $product['id_product']);
            if (empty($product->id)) {
                return false;
            }

            //foreach ($product->getAttributesResume($this->language->getId()) as $combination) {
              if (!$combinations_list = $product->getAttributesResume($this->language->getId())) {
                return false;
            }

            foreach ($combinations_list as $combination) {
                if ($combination['quantity'] > 0) {
                    return false;
                }
            }
        } elseif ($product['quantity'] > 0) {
            // Displayed only if the product stock is <= 0
            return false;
        }

A ver si hay suerte!

Ten en cuenta que los cambios en estos ficheros se pierden con cada actualización que hagas de Prestashop.

 

Manuel_GT

Manuel_GT

Hola @ExpertoPrestaShop y @rhhotelsupply

Por desgracia mi versión de Prestashop (8.1.7) debe ser distinta de la tuya porque en la posición 636 no tengo ese código.....yo lo tengo en 660

        if ($product['id_product_attribute']) {
            // Displayed only if all combinations are out of stock (stock is <= 0)
            $product = new Product((int) $product['id_product']);
            if (empty($product->id)) {
                return false;
            }

            foreach ($product->getAttributesResume($this->language->getId()) as $combination) {
                if ($combination['quantity'] > 0) {
                    return false;
                }
            }
        } elseif ($product['quantity'] > 0) {
            // Displayed only if the product stock is <= 0
            return false;
        }

Es raro que la sugerencia de @ExpertoPrestaShop no funcione.

        if ($product['id_product_attribute']) {
            // Displayed only if all combinations are out of stock (stock is <= 0)
            $product = new Product((int) $product['id_product']);
            if (empty($product->id)) {
                return false;
            }

            //foreach ($product->getAttributesResume($this->language->getId()) as $combination) {
              if (!$combinations_list = $product->getAttributesResume($this->language->getId())) {
                return false;
            }

            foreach ($combinations_list as $combination) {
                if ($combination['quantity'] > 0) {
                    return false;
                }
            }
        } elseif ($product['quantity'] > 0) {
            // Displayed only if the product stock is <= 0
            return false;
        }

A ver si hay suerte!

 

Manuel_GT

Manuel_GT

Hola @ExpertoPrestaShop y @rhhotelsupply

Por desgracia mi versión de Prestashop (8.1.7) debe ser distinta de la tuya porque en la posición 636 no tengo ese código.....

 

A ver si hay suerte!

 

Manuel_GT

Manuel_GT

Hola @ExpertoPrestaShop y @rhhotelsupply

Por desgracia mi versión de Prestashop (8.1.7) debe ser distinta de la tuya porque en la posición 636 no tengo ese código.....

Basándome en el pedazo de código original que pegas, no tengo claro que la solución planteada por @ExpertoPrestaShop sea adecuada, ya que en mi opinión, lo que comprueba es el stock de las combinaciones si estas existen y, si no hay, el del producto. Pero con el nuevo código, volvería sin comprobar el producto, simplemente porque no hay combinaciones o algún problema con ellas. Creo que lo que debería hacer es continuar si no hay error o saltar al siguiente, envolviendo el foreach en la condición.

          //foreach ($product->getAttributesResume($this->language->getId()) as $combination) {

			if ($combinations_list = $product->getAttributesResume($this->language->getId())) {
              foreach ($combinations_list as $combination) {
                  if ($combination['quantity'] > 0) {
                      return false;
                  }
              }
			}

        } elseif ($product['quantity'] > 0) {
            // Displayed only if the product stock is <= 0
            return false;
        }

        return true;
    }

Ya que $product->getAttributesResume puede devolver false. Si miramos la clase Product:

 

    /**
     * Get all available product attributes resume.
     *
     * @param int $id_lang Language identifier
     * @param string $attribute_value_separator
     * @param string $attribute_separator
     *
     * @return bool|array Product attributes combinations
     */
    public function getAttributesResume($id_lang, $attribute_value_separator = ' - ', $attribute_separator = ', ')

A ver si hay suerte!

 

Manuel_GT

Manuel_GT

Hola @ExpertoPrestaShop y @rhhotelsupply

Por esgracia mi versión de prestashop (8.1.7) debe ser distinta de la tuya porque en la posición 636 no tengo ese código.....

Basándome en el pedazo de código original que pegas, no tengo claro que la solución planteada por @ExpertoPrestaShop sea adecuada, ya que en mi opinión, lo que comprueba es el stock de las combinaciones si estas existen y, si no hay, el del producto. Pero con el nuevo código, volvería sin comprobar el producto, simplemente porque no hay combinaciones o algún problema con ellas. Creo que lo que debería hacer es continuar si no hay error o saltar al siguiente, envolviendo el foreach en la condición.

          //foreach ($product->getAttributesResume($this->language->getId()) as $combination) {

			if ($combinations_list = $product->getAttributesResume($this->language->getId())) {
              foreach ($combinations_list as $combination) {
                  if ($combination['quantity'] > 0) {
                      return false;
                  }
              }
			}

        } elseif ($product['quantity'] > 0) {
            // Displayed only if the product stock is <= 0
            return false;
        }

        return true;
    }

Ya que $product->getAttributesResume puede devolver false. Si miramos la clase Product:

 

    /**
     * Get all available product attributes resume.
     *
     * @param int $id_lang Language identifier
     * @param string $attribute_value_separator
     * @param string $attribute_separator
     *
     * @return bool|array Product attributes combinations
     */
    public function getAttributesResume($id_lang, $attribute_value_separator = ' - ', $attribute_separator = ', ')

A ver si hay suerte!

 

×
×
  • Create New...