Доброго времени суток!
Ситуация такова. Есть ocStore 1.5.5.1.2 и фильтр Mega Filter PRO 1.2.8.6
Фильтр работает нормально, пока не обнаружил существенную проблему. Он не проверяет остаток Опции по наличию, т.е. > 0.
В настройках модуля нет на этот счет никаких намеков и предложений.
Решил копнуть руками и удалось мне заставить его подсчитывать корректно и выдавать правдивую информации об товаре опции с 0 остатком
сделал я это в файле mega_filter.php по адресу www/catalog/model/module
вынес $conditionsIn[] = '`pov`.`quantity` > 0'; за пределы условия проверки чего-то там...
private function _getCountsByOptions( array $conditions, array $conditionsIn ) {
$counts = array();
$conditionsOut = $this->_conditions['out'];
$columns = $this->_baseColumns( '`pov`.`option_value_id`', '`pov`.`option_id`', '`p`.`product_id`' );
if( in_array( $this->route(), self::$_specialRoute ) ) {
$columns[] = $this->_specialCol();
$conditions[] = '`special` IS NOT NULL';
}
if( ! empty( $this->_settings['in_stock_default_selected'] ) || ( ! empty( $this->_parseParams['stock_status'] ) && in_array( $this->inStockStatus(), $this->_parseParams['stock_status'] ) ) ) {
}
$conditionsIn[] = '`pov`.`quantity` > 0';
$sql = $this->_createSQLByCategories(sprintf( "
SELECT
%s
FROM
`" . DB_PREFIX . "product` AS `p`
INNER JOIN
`" . DB_PREFIX . "product_option_value` AS `pov`
ON
`pov`.`product_id` = `p`.`product_id`
%s
WHERE
%s
", implode( ',', $columns ), $this->_baseJoin(), implode( ' AND ', $this->_baseConditions( $conditionsIn ) ) ));
НО осталась еще проблема, связанная с тем, что он не передает на вывод данные с учетом проверки товара на > 0.
т.е. Фильтр считает и показывает данные правильно, а вот обновление товара живет своей жизнь и не понятно, где копать, что бы оно обновляло товары в категории корректно остатку.
Последнюю зацепку нашел на в mega_filter.xml по адресу www/vqmod/xml
в строке $sql = MegaFilterCore::newInstance( $this, $sql )->getSQL( __FUNCTION__ );
<file path="catalog/model/catalog/" name="product.php">
<operation>
<search position="before"><![CDATA[$query = $this->db->query($sql);]]></search>
<add><![CDATA[
if( in_array( __FUNCTION__, array( 'getProducts', 'getTotalProducts', 'getProductSpecials', 'getTotalProductSpecials' ) ) ) {
if( ! empty( $this->request->get['mfp'] ) || ( NULL != ( $mfSettings = $this->config->get('mega_filter_settings') ) && ! empty( $mfSettings['in_stock_default_selected'] ) ) ) {
$this->load->model( 'module/mega_filter' );
$sql = MegaFilterCore::newInstance( $this, $sql )->getSQL( __FUNCTION__ );
}
}
]]></add>
</operation>
Кто сталкивался с подобной проблемой? Какие мысли на этот счет имеете? Что я могу упустить?