Question

I'm trying to customize magento's price layered navigation ala this thread: http://www.magentocommerce.com/boards/viewthread/65135/P15/#t278667

But when I copied and pasted his code I'm running into an error, see code below. Any ideas?

protected function _getItemsData()
{
    $key = $this->_getCacheKey();

    $data = $this->getLayer()->getAggregator()->getCacheData($key);
    if ($data === null) {
        $range      = 100;// $this->getPriceRange();
        $minEntries = 30;
        $minPercentage = 12; //overrides the previous line if set, sets minEntries to $minPercentage of total items
        $lastRange  = 5000; //collects everything over this value into one range, must be a multiple of $range. Set to 0 for no last range.
        $lastRangeIndex = $lastRange == 0 ? 0 : intval($lastRange / $range);

        $dbRanges   = $this->getRangeItemCounts($range);
        if ( ($minPercentage > 0) && ($minPercentage < 100) ) {
            $itemCount = array_sum($dbRanges);
            $minEntriesByPercentage = intval( $itemCount * ($minPercentage / 100) );
            $minEntries = $minEntriesByPercentage;
        }
        $data       = array();

        $collect = 0;
        $collectIndex = 0;
        $collections = 1;
        $lastIndex = 0;
        foreach ($dbRanges as $index=>$count) {
            if ( ( ( $collect + $count ) >= $minEntries ) && ( ($index <= $lastRangeIndex) || ($lastRangeIndex == 0) ) {
                    $collections = $collectIndex == 0 ? 1 : ( $index - $collectIndex ) + 1;
                    $data[] = array(
                        'label' => $this->_renderItemLabel($range * $collections, $index / $collections),
                        'value' => ( $index / $collections ) . ',' . $range * $collections,
                        'count' => $count + $collect,
                    );
                    $collect = 0;
                    $collections = 1;
                    $collectIndex = 0;
            } else {
                    $collect = $collect + $count;
                    if ( $collectIndex == 0 ) {
                            $collectIndex = $index;
                    }
                    $collections = $collectIndex == $index ? 1 : ( $index - $collectIndex ) + 1;

            }
            $lastIndex = $index;
        }
        if ( $collect > 0 ) {
                  $data[] = array(
                       'label' => $this->_renderItemLabel($range * $collections, $lastIndex / $collections),
                       'value' => ( $lastIndex / $collections ) . ',' . $range * $collections,
                       'count' => $collect,
                   );
        }

        $tags = array(
            Mage_Catalog_Model_Product_Type_Price::CACHE_TAG,
        );
        $tags = $this->getLayer()->getStateTags($tags);
        $this->getLayer()->getAggregator()->saveCacheData($data, $key, $tags);
    }
    return $data;
}
Was it helpful?

Solution

At

if ( ( ( $collect + $count ) >= $minEntries ) && ( ($index <= $lastRangeIndex) || ($lastRangeIndex == 0) ) {

is missing a ")" for the if syntax:

if ( ( ( $collect + $count ) >= $minEntries ) && ( ($index <= $lastRangeIndex) || ($lastRangeIndex == 0) )) {
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top