0

あるサイト(www.theprinterdepo.com)で非常に奇妙な問題が発生しています。グーグルクロームでは、500の内部サーバーエラーが発生しています。ただし、IEではFirefoxで正常に動作します)。私が気付いたのは、Chromeに移動して履歴をクリックし、すべてのキャッシュやCookieなどを削除すると、再び正常に機能することです。

system.logを削除して再度確認したところ、ログに記録されるのはこれだけです。

最初の引数は、/ xxx / xxx / public_html / app / code / local / Mf / Searchterms / Model/Layer.phpの配列である必要があります

これは私が触れたことがない標準のMagentoファイルですが、ここにコードがあります。

<?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;
    }
}

更新1: apacheエラーログをクリーンアップし、ブラウザーを更新すると、ログの新しいテキストになります:[client 83.134.115.127]スクリプトヘッダーの早期終了:index.php

4

1 に答える 1

1

おそらく最初の行(Mage::..)が返さNULLれるかFALSE、結果セットが空でarray_filterがnull / false値ではなく配列を必要とする場合!これを試して:

$productIds = Mage::getModel('searchterms/searchterms')->getProducts($query->getId());
if (!$productIds) {
    $productIds = array();
}
$productIds = array_filter($productIds);

しかし、これは(おそらく)間違った使い方array_filterです。false2番目の引数がないと、たとえば要素が、、、、の場合など、nullと評価falseされる配列要素をフィルタリングします。しかし、それがそのような要素を返すことはないだろうと私は疑っています(特定のケースについての知識がなくても)。しかし、そのような要素を含む配列を返す場合は、その背後にある設計が悪いことを示しています。empty arrayempty stringMage::getModel(...)->getProducts(...);

于 2012-09-30T20:55:47.800 に答える