Перейти к содержанию

enix

Новичок
  • Публикаций

    11
  • Зарегистрирован

  • Посещение

Репутация

1 Обычный

Информация о enix

  • Звание
    Пользователь
  1. Добрый день. Прошу помощи у гуру программистов, так как у самого уже не хватает знаний что бы оптимизировать скрипт. В целом логика скрипта следующая: есть интернет-витрина, в котором на данный момент представлено порядка 31,197 активных на данный момент товаров. И есть 20 точек в которых данные товары продаются, но как вы понимаете товар может находиться не во всех этих точках а только в некоторых, и было принять решение используя функционал движка атрибуты реализовать показ товаров в конкретном магазине. Пример того что в итоге получается здесь: http://postelka.tomsk.ru/tekstil/postelnoe-bele-komplekty (слева атрибут наличие - магазин) Скрипт после своего завершения дает примерно 196,305 записей в таблице атрибутов. Среднее время выполнение скрипта 2-3 часа по крону, делается ночью, что бы не кому не мешать. Проблема в том что до внедрения этого функционала с атрибутами, данный скрипт отрабатывал за 20 минут и писал в каждый товар сколько товара на каком складе находится, пример тут: http://postelka.tomsk.ru/tekstil/postelnoe-bele-komplekty/komplekt-postelnogo-belya-15-spalnyy-om-feya По всей видимости когда дописывал где-то перемудрил и он делает много лишнего раз так существенно возросло время исполнения. Если есть идеи или советы по оптимизации кода прошу помощи. Изначальное авторство кода не мое, за основу в самом начале был взят код costas'а с одноименного модуля CSVPrice Позже все переросло вот в такое: Код: <?php class ModelModuleCSVPrice extends Model { private $CSV_SEPARATOR = ';'; private $CSV_ENCLOSURE = '"'; private $data = array(); public function update() { $this->db->query("UPDATE `".DB_PREFIX."setting` SET value='1' WHERE `group` LIKE 'config' AND `key` LIKE 'config_maintenance'"); $this->db->query("DELETE FROM `".DB_PREFIX."product_to_sklad`"); $this->db->query("ALTER TABLE `".DB_PREFIX."product_to_sklad` AUTO_INCREMENT=0"); $this->db->query("DELETE FROM `".DB_PREFIX."product_special`"); $this->db->query("ALTER TABLE `".DB_PREFIX."product_special` AUTO_INCREMENT=0"); $this->db->query("UPDATE `".DB_PREFIX."product` SET stock_status_id=5 WHERE stock_status_id=6 OR stock_status_id=8 OR stock_status_id=7 OR stock_status_id=0 OR stock_status_id=9"); $this->db->query("UPDATE `".DB_PREFIX."product` SET cost=0,price=0,opt=0,rozn=0,optsp=0,quantity=0,status=0 WHERE stock_status_id=5 OR stock_status_id=6 OR stock_status_id=8 OR stock_status_id=7 OR stock_status_id=0 OR stock_status_id=9"); $this->db->query("DELETE FROM `".DB_PREFIX."product_attribute` WHERE `attribute_id`=177"); if (($handle = fopen("/var/www/postelka/data/www/postelka.tomsk.ru/import/td.csv", "r")) !== FALSE) { $row = 0; while (($data = fgetcsv($handle, 1000, $this->CSV_SEPARATOR, $this->CSV_ENCLOSURE)) !== FALSE) { $num = count($data); $row++; $item = array(); $akciya= ""; for ($c=0; $c < $num; $c++) { $item[] = $data[$c]; } $quantity = $item[4]; $rezerv = $item[5]; $counts = $quantity-$rezerv; if ($counts>0) { $model = $item[0]; $price = $item[3]; // Опт1 = 2 ; Розница = 3 $opt = $item[1]; $rozn = $item[3]; $optsp = $opt*0.05+$opt; $imagaz = $rozn; $price = round($price,2); $opt = round($opt,2); $imagaz = round($imagaz,0); $optsp = round($optsp,0); $sklad_num = $item[7]; $tega = $item[6]; $tega = iconv("CP1251", "UTF-8", $tega); if ($tega=='1') {$procent=0.1;} elseif ($tega=='2') {$procent=0.2;} elseif ($tega=='3') {$procent=0.3;} elseif ($tega=='4') {$procent=0.4;} elseif ($tega=='5') {$procent=0.5;} elseif ($tega=='6') {$procent=0.6;} elseif ($tega=='7') {$procent=0.7;} elseif ($tega=='8') {$procent=0.0;} elseif ($tega=='9') {$procent=0.15;} elseif ($tega=='0') {$procent=0.25;} elseif ($tega=='ц') {$procent=0.0;} elseif ($tega=='А') {$procent=0.0;} //elseif ($tega=='е') { //if ($sklad_num=='145') {$procent=0.20;} //else {$procent=0.0;} //} //elseif ($tega=='ъ') { //if ($sklad_num=='48') {$procent=0.10;} //else {$procent=0.0;} //} else { $procent=0.0; } $product_id = $this->db->query("SELECT product_id as product_id1 FROM `".DB_PREFIX."product` WHERE model='".$model."'"); $product_id = $product_id->row['product_id1']; if ($product_id) { $text_attribute = $this->db->query("SELECT text as text_attribute FROM `".DB_PREFIX."product_attribute` WHERE `attribute_id`=177 AND `product_id`='".$product_id."'"); $text_attribute = $text_attribute->row['text_attribute']; if ($text_attribute) { if ($sklad_num=='41') { $name_sklad='пр. Фрунзе, 77б - Альбом'; } elseif ($sklad_num=='141') { $name_sklad='Асино - ул. Станционная, 40/1'; } elseif ($sklad_num=='111') { $name_sklad='ул. Дальне-Ключевская, 6'; } elseif ($sklad_num=='43') { $name_sklad='пр. Мира, 21в'; } elseif ($sklad_num=='48') { $name_sklad='ул. Красноармейская, 122'; } elseif ($sklad_num=='136') { $name_sklad='ул. Иркутский тракт, 110'; } elseif ($sklad_num=='79') { $name_sklad='ул. Киевская, 76 (Посуда)'; } elseif ($sklad_num=='46') { $name_sklad='ул. Иркутский тракт, 142/3'; } elseif ($sklad_num=='145') { $name_sklad='пр. Ленина, 200'; } elseif ($sklad_num=='125') { $name_sklad='ул. Нахимова, 15'; } elseif ($sklad_num=='93') { $name_sklad='пер. Мариинский, 4'; } elseif ($sklad_num=='83') { $name_sklad='пр. Фрунзе, 24 - Марка'; } elseif ($sklad_num=='94') { $name_sklad='пр. Мира, 72а'; } elseif ($sklad_num=='134') { $name_sklad='ул. Новосибирская, 6'; } elseif ($sklad_num=='35') { $name_sklad='ул. Киевская, 76 (Одежда)'; } elseif ($sklad_num=='57') { $name_sklad='ул. Иркутский тракт, 76'; } elseif ($sklad_num=='143') { $name_sklad='Северск - пр. Коммунистический, 120'; } elseif ($sklad_num=='180') { $name_sklad='ул. Елизаровых, 22'; } elseif ($sklad_num=='176') { $name_sklad='ул. Междугородная, 28'; } elseif ($sklad_num=='98') { $name_sklad='Товар в дороге'; } elseif ($sklad_num=='26') { $name_sklad='Оптовый склад'; } elseif ($sklad_num=='114') { $name_sklad='ул. Богдана Хмельницкого, 43'; } else { } //if ($sklad_num!='26') { $this->db->query("UPDATE `".DB_PREFIX."product_attribute` SET text=CONCAT(text,';".$name_sklad."') WHERE `attribute_id`=177 AND `product_id`='".$product_id."'"); //} else { //} } else { if ($sklad_num=='41') { $name_sklad='пр. Фрунзе, 77б - Альбом'; } elseif ($sklad_num=='141') { $name_sklad='Асино - ул. Станционная, 40/1'; } elseif ($sklad_num=='111') { $name_sklad='ул. Дальне-Ключевская, 6'; } elseif ($sklad_num=='43') { $name_sklad='пр. Мира, 21в'; } elseif ($sklad_num=='48') { $name_sklad='ул. Красноармейская, 122'; } elseif ($sklad_num=='136') { $name_sklad='ул. Иркутский тракт, 110'; } elseif ($sklad_num=='79') { $name_sklad='ул. Киевская, 76 (Посуда)'; } elseif ($sklad_num=='46') { $name_sklad='ул. Иркутский тракт, 142/3'; } elseif ($sklad_num=='145') { $name_sklad='пр. Ленина, 200'; } elseif ($sklad_num=='125') { $name_sklad='ул. Нахимова, 15'; } elseif ($sklad_num=='93') { $name_sklad='пер. Мариинский, 4'; } elseif ($sklad_num=='83') { $name_sklad='пр. Фрунзе, 24 - Марка'; } elseif ($sklad_num=='94') { $name_sklad='пр. Мира, 72а'; } elseif ($sklad_num=='134') { $name_sklad='ул. Новосибирская, 6'; } elseif ($sklad_num=='35') { $name_sklad='ул. Киевская, 76 (Одежда)'; } elseif ($sklad_num=='57') { $name_sklad='ул. Иркутский тракт, 76'; } elseif ($sklad_num=='143') { $name_sklad='Северск - пр. Коммунистический, 120'; } elseif ($sklad_num=='180') { $name_sklad='ул. Елизаровых, 22'; } elseif ($sklad_num=='176') { $name_sklad='ул. Междугородная, 28'; } elseif ($sklad_num=='98') { $name_sklad='Товар в дороге'; } elseif ($sklad_num=='26') { $name_sklad='Оптовый склад'; } elseif ($sklad_num=='114') { $name_sklad='ул. Богдана Хмельницкого, 43'; } else { } //if ($sklad_num!='26') { $this->db->query("INSERT INTO `".DB_PREFIX."product_attribute` (`product_id`,`attribute_id`,`language_id`,`text`) VALUES ($product_id,177,1,'$name_sklad')"); //} else { //} } } if ($procent>0) { $akciya=$rozn-$rozn*$procent; $akciya=round($akciya,0); $imagaz=$akciya; if ($optsp>$akciya) { $optsp=$akciya; } $this->db->query("INSERT INTO ".DB_PREFIX."product_to_sklad (product_id,sklad_id,count,opt,imagaz,rozn,zakup,optsp) VALUES ('".(int)$model."','".$sklad_num."','".$counts."','".$opt."','".$imagaz."','".$akciya."','0','".$optsp."')"); } else { if ($tega=='ц' OR $tega=='А') { $imagaz = $rozn; } else{ $imagaz = $rozn-($rozn*0.15); $imagaz = round($imagaz,0); } if ($optsp>$rozn) { $optsp=$rozn; } $this->db->query("INSERT INTO ".DB_PREFIX."product_to_sklad (product_id,sklad_id,count,opt,imagaz,rozn,zakup,optsp) VALUES ('".(int)$model."','".$sklad_num."','".$counts."','".$opt."','".$imagaz."','".$rozn."','0','".$optsp."')"); } if ($procent=="0" OR $akciya==$price) { $this->db->query("UPDATE ".DB_PREFIX."product SET price='".$price."', quantity=`quantity`+".(int)$counts." , cost='0', opt='".$opt."', optsp='".$optsp."', rozn='".$rozn."', status='1', date_modified=NOW() WHERE `stock_status_id`=5 AND model='" .(int)$model. "'"); } else { $this->db->query("UPDATE ".DB_PREFIX."product SET price='".$price."', quantity=`quantity`+".(int)$counts." , cost='0', opt='".$opt."', optsp='".$optsp."', rozn='".$rozn."', status='1', date_modified=NOW() WHERE `stock_status_id`=5 AND model='" .(int)$model. "'"); if ($tega=='е' OR $tega=='ъ') { /*} elseif ($tega=='н') { if ($sklad_num=='48') { } else { $product_id = $this->db->query("SELECT product_id as product_id1 FROM `".DB_PREFIX."product` WHERE model='".$model."'"); $product_id = $product_id->row['product_id1']; if ($product_id) { $product_special_price = $this->db->query("SELECT MIN(price) as product_special_price1 FROM `".DB_PREFIX."product_special` WHERE product_id='".$product_id."'"); $product_special_price = $product_special_price->row['product_special_price1']; if ($product_special_price!=NULL OR $product_special_price>0) { if ($product_special_price>$akciya) { $this->db->query("INSERT INTO `".DB_PREFIX."product_special` (`product_special_id`,`product_id`,`customer_group_id`,`priority`,`price`,`date_start`,`date_end`) VALUES (NULL,$product_id,8,1,$akciya,0000-00-00,0000-00-00)"); } else { } } else { $this->db->query("INSERT INTO `".DB_PREFIX."product_special` (`product_special_id`,`product_id`,`customer_group_id`,`priority`,`price`,`date_start`,`date_end`) VALUES (NULL,$product_id,8,1,$akciya,0000-00-00,0000-00-00)"); } } }*/ } else { if ($product_id) { $product_special_price = $this->db->query("SELECT MIN(price) as product_special_price1 FROM `".DB_PREFIX."product_special` WHERE product_id='".$product_id."'"); $product_special_price = $product_special_price->row['product_special_price1']; if ($product_special_price!=NULL OR $product_special_price>0) { if ($product_special_price>$akciya) { $this->db->query("INSERT INTO `".DB_PREFIX."product_special` (`product_special_id`,`product_id`,`customer_group_id`,`priority`,`price`,`date_start`,`date_end`) VALUES (NULL,$product_id,8,1,$akciya,0000-00-00,0000-00-00)"); } else { } } else { $this->db->query("INSERT INTO `".DB_PREFIX."product_special` (`product_special_id`,`product_id`,`customer_group_id`,`priority`,`price`,`date_start`,`date_end`) VALUES (NULL,$product_id,8,1,$akciya,0000-00-00,0000-00-00)"); } } } } } unset($item); } fclose($handle); } $this->db->query("UPDATE `".DB_PREFIX."setting` SET value='0' WHERE `group` LIKE 'config' AND `key` LIKE 'config_maintenance'"); } } ?>
  2. Спасибо за подгон фильтра под наши нужды, и в целом за поддержку модуля. Уже не раз обращаюсь в ЛС и всегда оказывается адекватная помощь в решении проблемы и главное быстро. В том числе и правки которые не имеют на прямую отношение к фильтру.
  3. Не могу не написать, что в последней версии модуля, логика работает замечательно. Теперь верно фильтруется параметр И внутри атрибута. Отдельное спасибо за исправление бага с производителями. Многие пользователи жаловались на это. Ну и то что теперь можно внутри списка переключаться без лишнего действия, то же огромный плюс. Теперь будем ждать версию, которая сейчас разрабатывается для магазинов с большим количеством товаров, так как сейчас немного подтормаживает когда в категории больше 6000 позиций. И спасибо за помощь с запуском модуля на нашем кастрированном движке. Самим бы ни за что не удалось его адаптировать.
  4. в последней версии 2.4 почему то не фильтрует в некоторых категориях, вернее вроде как всю информацию обрабатывает но данные loadmask не подменяет, то есть выводит данные как будто фильтр вообще выключен: Вот что показывает хром: http://prntscr.com/zpeud я так понимаю result_html отвечает за данный вывод, пишет null в других категориях все нормально: http://prntscr.com/zpeyc Других ошибок не заметил Отдельное спасибо за исправление логики в атрибутах, теперь работает вообще идеально этот момент.
  5. В IE8 если в категории производителей больше 1, то при фильтрации по атрибуту он самопроизвольно выбирает любого производителя и подставляет его, после снятия галочки с атрибута - производитель так и остается выбранный. Пример: http://domsovkusom.ru/tekstil/postelnoe-bele-komplekty Ну и кнопка очистить все еще сбрасывает зажатую опцию "В Наличии" и начинает показывать товар с количеством 0
  6. Неплохо было бы всем показать такой хак в ЛС :) Так как эта проблема у всех купивших модуль. Все атрибуты показываются как в производителе так и в категории. + Не пересчитывается слайдер цены, как раньше. Пожелание: Сделайте опцию выводить или нет галочку наличия в фильтре, может еще добавить в настройках модуля значение по умолчанию и тем самым скрыть эту опцию с сайта вовсе. Допустим мне надо что бы всегда показывалось только то что имеет цену больше 0 и количество больше 0. В остальном модуль хорош. Спасибо!
  7. enix

    [Поддержка] filter Pro

    Подскажите, а под мультимагазины будет дорабатывать модуль. Сейчас показывается только на основном магазине. Сорри, разобрался. забыл схемы прописать для нового магазина.
  8. так и не удалось запустить поиск по базе, ошибку выдает. посмотрел к каким столбцам обращается скрипт, все есть и во всех записи имеются.Даже не знаю где еще может быть косяк.
  9. Спасибо! действительно был потерян один из компонентов VBA. К базе вроде подключается, пароль спрашивает. Но выдает ошибку: --------------------------- Microsoft Excel --------------------------- Ошибка-2147217900 --------------------------- ОК --------------------------- Номер заказа точно верный, единственное база заказов немного модифицированная, может он берет данные из определенных колонок, или еще какая привязка есть?
  10. В данный момент есть проблема с тем, что в каждой категории можно задать количество товара выводимого на страницу, от 25 до 100. Но при переходе в другую категорию, это значение опять сбрасывается, до значения по умолчанию. Значение по умолчанию изменять считаю не целесообразным, так как не у всех интернет соединение позволяет грузить по 100 товаров. А тем кто может себе это позволить, постоянно мучаются переходя из категории в категорию. Так вот суть вопроса, возможно кто-нибудь уже реализовывал такой фичу, что бы каждый пользователь мог задать единую настройку для всех страниц, и пускай она хранится где-нибудь в куках или в мускле по ip-адрессу, или после регистрации по пользователю, или еще где-нибудь.
  11. Добрый день подскажите, кто знает. Неожиданно возникла проблема: В соседней теме прочитал что может быть связано с новым модулем, но последние 3 недели новых модулей не добавлялось. Во всех файлах ругается на: if ($modules) { foreach ($modules as $module) { // 49 строчка if ($module['layout_id'] == $layout_id && $module['position'] == 'column_right' && $module['status']) { $module_data[] = array( 'code' => $extension['code'], 'setting' => $module, 'sort_order' => $module['sort_order'] ); } } }
×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.