Skip to content

Array sizes are inconsistent #2533

@bennyborn

Description

@bennyborn

I have a multilingual shop where all 3 languages are using exactly the same modules and even the products published in these languages are the same. It works for two languages withouth any problem but on the third language I receive the following error in the product list:

ValueError:
Array sizes are inconsistent

  at vendor/isotope/isotope-core/system/modules/isotope/library/Isotope/Model/Product.php:578
  at array_multisort(array('1000', '800', '30', '29', '28', '27', '26', '25', '24', '24', '23', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', ''), 3, 0, array())
     (vendor/isotope/isotope-core/system/modules/isotope/library/Isotope/Model/Product.php:578)
  at Isotope\Model\Product::find(array('column' => array('tl_iso_product.published=\'1\' AND (tl_iso_product.start=\'\' OR tl_iso_product.start<\'1724240580\') AND (tl_iso_product.stop=\'\' OR tl_iso_product.stop>\'1724240640\')', 'tl_iso_product.pid=0', 'c.page_id=625', 'tl_iso_product.is_accessory=0'), 'value' => array(), 'return' => 'Collection', 'order' => 'c.sorting', 'filters' => array(), 'sorting' => array('sortingnr' => object(Sort)), 'group' => 'tl_iso_product.id'))
     (vendor/contao/core-bundle/src/Resources/contao/library/Contao/Model.php:962)
  at Contao\Model::findBy(array('tl_iso_product.published=\'1\' AND (tl_iso_product.start=\'\' OR tl_iso_product.start<\'1724240580\') AND (tl_iso_product.stop=\'\' OR tl_iso_product.stop>\'1724240640\')', 'tl_iso_product.pid=0', 'c.page_id=625', 'tl_iso_product.is_accessory=0'), array(), array('column' => array('tl_iso_product.published=\'1\' AND (tl_iso_product.start=\'\' OR tl_iso_product.start<\'1724240580\') AND (tl_iso_product.stop=\'\' OR tl_iso_product.stop>\'1724240640\')', 'tl_iso_product.pid=0', 'c.page_id=625', 'tl_iso_product.is_accessory=0'), 'value' => array(), 'return' => 'Collection', 'order' => 'c.sorting', 'filters' => array(), 'sorting' => array('sortingnr' => object(Sort))))
     (vendor/isotope/isotope-core/system/modules/isotope/library/Isotope/Model/Product.php:154)
  at Isotope\Model\Product::findPublishedBy(array('tl_iso_product.published=\'1\' AND (tl_iso_product.start=\'\' OR tl_iso_product.start<\'1724240580\') AND (tl_iso_product.stop=\'\' OR tl_iso_product.stop>\'1724240640\')', 'tl_iso_product.pid=0', 'c.page_id=625', 'tl_iso_product.is_accessory=0'), array(), array('order' => 'c.sorting', 'filters' => array(), 'sorting' => array('sortingnr' => object(Sort))))
     (vendor/isotope/isotope-core/system/modules/isotope/library/Isotope/Model/Product.php:323)
  at Isotope\Model\Product::findAvailableBy(array('tl_iso_product.pid=0', 'c.page_id=625', 'tl_iso_product.is_accessory=0'), array(), array('order' => 'c.sorting', 'filters' => array(), 'sorting' => array('sortingnr' => object(Sort))))
     (vendor/isotope/isotope-core/system/modules/isotope/library/Isotope/Module/ProductList.php:356)
  at Isotope\Module\ProductList->findProducts()
     (vendor/isotope/isotope-core/system/modules/isotope/library/Isotope/Module/ProductList.php:217)
  at Isotope\Module\ProductList->compile()
     (vendor/contao/core-bundle/src/Resources/contao/modules/Module.php:214)
  at Contao\Module->generate()
     (vendor/codefog/contao-haste/library/Haste/Frontend/AbstractFrontendModule.php:52)
  at Haste\Frontend\AbstractFrontendModule->generate()
     (vendor/isotope/isotope-core/system/modules/isotope/library/Isotope/Module/Module.php:116)
  at Isotope\Module\Module->generate()
     (vendor/isotope/isotope-core/system/modules/isotope/library/Isotope/Module/ProductList.php:105)
  at Isotope\Module\ProductList->generate()
     (vendor/contao/core-bundle/src/Resources/contao/elements/ContentModule.php:98)
  at Contao\ContentModule->generate()
     (vendor/contao/core-bundle/src/Resources/contao/library/Contao/Controller.php:623)
  at Contao\Controller::getContentElement(object(ContentModel), 'main')
     (vendor/contao/core-bundle/src/Resources/contao/modules/ModuleArticle.php:197)
  at Contao\ModuleArticle->compile()
     (vendor/contao/core-bundle/src/Resources/contao/modules/Module.php:214)
  at Contao\Module->generate()
     (vendor/contao/core-bundle/src/Resources/contao/modules/ModuleArticle.php:70)
  at Contao\ModuleArticle->generate(true)
     (vendor/contao/core-bundle/src/Resources/contao/library/Contao/Controller.php:551)
  at Contao\Controller::getArticle(2, false, true, 'main')
     (vendor/contao/core-bundle/src/Resources/contao/elements/ContentArticle.php:30)
  at Contao\ContentArticle->generate()
     (vendor/contao/core-bundle/src/Resources/contao/library/Contao/Controller.php:623)
  at Contao\Controller::getContentElement(object(ContentModel), 'main')
     (vendor/contao/core-bundle/src/Resources/contao/modules/ModuleArticle.php:197)
  at Contao\ModuleArticle->compile()
     (vendor/contao/core-bundle/src/Resources/contao/modules/Module.php:214)
  at Contao\Module->generate()
     (vendor/contao/core-bundle/src/Resources/contao/modules/ModuleArticle.php:70)
  at Contao\ModuleArticle->generate(false)
     (vendor/contao/core-bundle/src/Resources/contao/library/Contao/Controller.php:551)
  at Contao\Controller::getArticle(object(ArticleModel), true, false, 'main')
     (vendor/contao/core-bundle/src/Resources/contao/library/Contao/Controller.php:393)
  at Contao\Controller::getFrontendModule('0', 'main')
     (vendor/contao/core-bundle/src/Resources/contao/pages/PageRegular.php:194)
  at Contao\PageRegular->prepare(object(PageModel))
     (vendor/contao/core-bundle/src/Resources/contao/pages/PageRegular.php:61)
  at Contao\PageRegular->getResponse(object(PageModel), true)
     (vendor/contao/core-bundle/src/Resources/contao/controllers/FrontendIndex.php:320)
  at Contao\FrontendIndex->renderPage(object(PageModel))
     (vendor/symfony/http-kernel/HttpKernel.php:163)
  at Symfony\Component\HttpKernel\HttpKernel->handleRaw(object(Request), 1)
     (vendor/symfony/http-kernel/HttpKernel.php:75)
  at Symfony\Component\HttpKernel\HttpKernel->handle(object(Request), 1, true)
     (vendor/symfony/http-kernel/Kernel.php:202)
  at Symfony\Component\HttpKernel\Kernel->handle(object(Request))
     (public/index.php:44)           

I could not figure out why it happens in the first place but $arrProducts contains way more entries than $arrParam[0]

https://github.com/isotope/core/blob/2.9/system/modules/isotope/library/Isotope/Model/Product.php#L562-L563

To fix the problem momentarily I've added a quick hotfix which makes sure that $arrProducts only contains the products listed in $arrParam[0]

// [...]
// -- HOTFIX: Make sure products matches the params
$arrProductsUnique = [];
foreach( $arrProducts as $i => $p ) {

    if( !array_key_exists($p->id, $arrParam[0]) ) {
        continue;
    }

    $arrProductsUnique[$p->id] = $p;
}
$arrProducts = $arrProductsUnique;
// -- HOTFIX

// Add product array as the last item.
// This will sort the products array based on the sorting of the passed in arguments.
$arrParam[] = &$arrProducts;
array_multisort(...$arrParam);

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions