I am having a very weird issue on one site (www.theprinterdepo.com), in google chrome I am seeing a 500 internal server errror.
However on IE an firefox it works fine).
What I noticed is that if I go to chrome and click on history and remove all cache, cookies, etc, then it works fine again.
I removed the system.log and checked again and the only thing logged is this one:
The first argument should be an array in /xxx/xxx/public_html/app/code/local/Mf/Searchterms/Model/Layer.php
THis is a standard magento file that I have never touched, but here its the code:
<?php
class Mf_Searchterms_Model_Layer extends Mage_Catalog_Model_Layer
{
const XML_PATH_DISPLAY_LAYER_COUNT = 'catalog/search/use_layered_navigation_count';
/**
* Get current layer product collection
*
* @return Mage_Catalog_Model_Resource_Eav_Resource_Product_Collection
*/
public function getProductCollection()
{
if (isset($this->_productCollections[$this->getCurrentCategory()->getId()])) {
$collection = $this->_productCollections[$this->getCurrentCategory()->getId()];
} else {
$collection = Mage::getResourceModel('catalogsearch/fulltext_collection');
$this->prepareProductCollection($collection);
$this->_productCollections[$this->getCurrentCategory()->getId()] = $collection;
}
return $collection;
}
/**
* Prepare product collection
*
* @param Mage_Catalog_Model_Resource_Eav_Resource_Product_Collection $collection
* @return Mage_Catalog_Model_Layer
*/
public function prepareProductCollection($collection)
{
$params = Mage::app()->getRequest()->getParams();
$collection
->addAttributeToSelect(Mage::getSingleton('catalog/config')->getProductAttributes());
$query = Mage::helper('catalogsearch')->getQuery();
$productIds = Mage::getModel('searchterms/searchterms')->getProducts($query->getId());
$productIds = array_filter($productIds);
//var_dump($productIds);
if(is_array($productIds) && sizeof($productIds) > 0){
//echo "asd";
$productIdArray = $productIds;
$collection->addFieldToFilter('entity_id', array('in'=>$productIdArray));
$collection->joinField('position',
'searchterms_product',
'position',
'product_id=entity_id',
'searchterms_id='.$query->getId(),
'left')
;
if(isset($params['order']) && $params['order'] != ""){
Mage::getSingleton('catalog/product_status')->addVisibleFilterToCollection($collection);
Mage::getSingleton('catalog/product_visibility')->addVisibleInSearchFilterToCollection($collection);
}else{
$collection->setOrder(`searchterms_product`.'position','ASC');
Mage::getSingleton('catalog/product_status')->addVisibleFilterToCollection($collection);
}
}
else
{
$collection->addSearchFilter(Mage::helper('catalogsearch')->getQuery()->getQueryText());
$collection->setStore(Mage::app()->getStore())
->addMinimalPrice()
->addFinalPrice()
->addTaxPercents()
->addStoreFilter()
->addUrlRewrite();
Mage::getSingleton('catalog/product_status')->addVisibleFilterToCollection($collection);
Mage::getSingleton('catalog/product_visibility')->addVisibleInSearchFilterToCollection($collection);
}
return $this;
}
/**
* Get layer state key
*
* @return string
*/
public function getStateKey()
{
if ($this->_stateKey === null) {
$this->_stateKey = 'Q_' . Mage::helper('catalogsearch')->getQuery()->getId()
. '_'. parent::getStateKey();
}
return $this->_stateKey;
}
/**
* Get default tags for current layer state
*
* @param array $additionalTags
* @return array
*/
public function getStateTags(array $additionalTags = array())
{
$additionalTags = parent::getStateTags($additionalTags);
$additionalTags[] = Mage_CatalogSearch_Model_Query::CACHE_TAG;
return $additionalTags;
}
/**
* Add filters to attribute collection
*
* @param Mage_Catalog_Model_Resource_Eav_Resource_Product_Attribute_Collection $collection
* @return Mage_Catalog_Model_Resource_Eav_Resource_Product_Attribute_Collection
*/
protected function _prepareAttributeCollection($collection)
{
$collection->addIsFilterableInSearchFilter()
->addVisibleFilter();
return $collection;
}
/**
* Prepare attribute for use in layered navigation
*
* @param Mage_Eav_Model_Entity_Attribute $attribute
* @return Mage_Eav_Model_Entity_Attribute
*/
protected function _prepareAttribute($attribute)
{
$attribute = parent::_prepareAttribute($attribute);
$attribute->setIsFilterable(Mage_Catalog_Model_Layer_Filter_Attribute::OPTIONS_ONLY_WITH_RESULTS);
return $attribute;
}
}
UPDATE 1:
I managed to clean the apache error log, refreshed the browser and then this is the new text on the log:
[client 83.134.115.127] Premature end of script headers: index.php
Probably first line (
Mage::..) returnsNULLorFALSEwhen result set is empty and array_filter requires array, not null/false value! Try this:But this is (probably) a wrong way to use
array_filter. Without second argument, it would filter any array elements that evaluate tofalse, eg if an element isnull,false,empty array,empty string. But I doubt thatMage::getModel(...)->getProducts(...);would ever return such elements (without any knowledge for the particular case). But if it does return array with such elements, it is a sign of bad design behind it.