-
Публікації
1 750 -
З нами
-
Відвідування
Тип публікації
Профілі
Форум
Маркетплейс
Статті
FAQ
Наші новини
Магазин
Блоги
module__dplus_manager
Повідомлення, опубліковані користувачем halfhope
-
-
В моем модуле настраиваемой доставки тоже используется вывод описания. По ссылке вы найдете ocmod/vqmod файлы для вывода описания доставки.
Так же рекомендую посмотреть в сторону моего модуля, нет необходимости делать клоны.
-
Даже демо нет)
На скриншотах есть все что нужно, не вижу необходимости в демо.
-
Добавлена поддержка OpenCart 2.2
-
-
-
немного не в тему - почему никто не исправляет эти ошибки валилации ?
Я не так давно тоже создавал тему про валидность (здесь всего 5 недочетов)
но так никто и не помог.
почему ? есть причины по которым этого нельзя сделать или это работа как то не так стОит ?
Лично для меня это адовая рутина, лазить по различным тплкам и вкумодам, сканировать различные разделы с разными наборами модулей на валидность, исправлять если что не так. А если стоит PAV, то это вообще пц. Да сайт и так нормально индексируется и работает. К тому же не рекомендую проводить такую стандартизацию, когда клиент все еще на стадии "Оптимизировать сайт оп показателям GooglePage Speed".
А для приведения документа к стандартам HTML/XHTML, достаточно онлайн валидатора, он показывает что в документе не так.
-
Клиентская оптимизация по показателям GooglePage Speed от 5 к рублей.
Кроме этого пункта.
-
Сайт "обкатывается" на бесплатном хостинге.
Все правильно так и должно быть
-
С почасовой оплатой такой бюджет израсходуется на стадии подключения к фтп..
Оффтоп. Я иногда (слава богу, что редко) с клиентами подолгу разговариваю, т.к. не могу понять чего они хотят. И эти деньги кончаются на стадии отправки клиентом данных для подключения по FTP.
-
1
-
-
Добрый день!
А может кто установить и настроить за денежку.
С Уважением,
Владимир.
Отписался в ЛС.
-
UPD: Накосячил слегка с аттрибутами:
public function getProductAttributes($product_id) { $product_attribute_group_data = array(); $product_attribute_group_query = $this->db->query("SELECT a.attribute_id, ad.name as attribute_name, pa.text, ag.attribute_group_id, agd.name as attribute_group_name FROM " . DB_PREFIX . "product_attribute pa LEFT JOIN " . DB_PREFIX . "attribute a ON (pa.attribute_id = a.attribute_id) LEFT JOIN " . DB_PREFIX . "attribute_description ad ON (a.attribute_id = ad.attribute_id) LEFT JOIN " . DB_PREFIX . "attribute_group ag ON (a.attribute_group_id = ag.attribute_group_id) LEFT JOIN " . DB_PREFIX . "attribute_group_description agd ON (ag.attribute_group_id = agd.attribute_group_id) WHERE pa.product_id = " . (int)$product_id . " AND ad.language_id = agd.language_id AND pa.language_id = agd.language_id AND agd.language_id = " . (int)$this->config->get('config_language_id') . " ORDER BY ag.sort_order, agd.name, a.sort_order, ad.name"); $product_attribute_data = array(); foreach ($product_attribute_group_query->rows as $product_attribute) { $product_attribute_data[$product_attribute['attribute_group_id']][$product_attribute['attribute_id']] = array( 'attribute_id' => $product_attribute['attribute_id'], 'name' => $product_attribute['attribute_name'], 'text' => $product_attribute['text'] ); $product_attribute_group_data[$product_attribute['attribute_group_id']] = array( 'attribute_group_id' => $product_attribute['attribute_group_id'], 'name' => $product_attribute['attribute_group_name'], ); $product_attribute_group_data[$product_attribute['attribute_group_id']]['attribute'] =& $product_attribute_data[$product_attribute['attribute_group_id']]; } return $product_attribute_group_data; }
-
2
-
-
Недавно обратился клиент (OcStore 1.5.5.1.2.) с просьбой посмотреть и узнать где именно тормоза на сайте. Так как, на сайте под завязку используются опции и аттрибуты, я стал грешить на них еще до проверки, проверка xhprof дала понять, что я не ошибался. Одним кэшированием тут не отделаться, так как данные магазина постоянно обновляются и механизм инвалидации кэша далек от идеала.
Было принято решение оптимизировать функции получения списка аттрибутов и опций. Что именно сделано: Убраны дополнительные подзапросы из цикла обработки аттрибутов и опций, так как все необходимые данные можно получить в одном запросе. Так же используются PHP указатели, что позволит обработать все данные в одном цикле. Все это позволит получить все необходимые данные за один запрос и быстро из обработать.
В данном частном случае производительность увеличилась почти в 30 раз (очень много опций, значений опций и аттрибутов почти у каждого товара).
public function getProductAttributes($product_id) { $product_attribute_group_data = array(); $product_attribute_group_query = $this->db->query("SELECT a.attribute_id, ad.name as attribute_name, pa.text, ag.attribute_group_id, agd.name as attribute_group_name FROM " . DB_PREFIX . "product_attribute pa LEFT JOIN " . DB_PREFIX . "attribute a ON (pa.attribute_id = a.attribute_id) LEFT JOIN " . DB_PREFIX . "attribute_description ad ON (a.attribute_id = ad.attribute_id) LEFT JOIN " . DB_PREFIX . "attribute_group ag ON (a.attribute_group_id = ag.attribute_group_id) LEFT JOIN " . DB_PREFIX . "attribute_group_description agd ON (ag.attribute_group_id = agd.attribute_group_id) WHERE pa.product_id = " . (int)$product_id . " AND ad.language_id = agd.language_id AND pa.language_id = agd.language_id AND agd.language_id = " . (int)$this->config->get('config_language_id') . " ORDER BY ag.sort_order, agd.name, a.sort_order, ad.name"); $product_attribute_data = array(); foreach ($product_attribute_group_query->rows as $product_attribute) { $product_attribute_data[$product_attribute['attribute_id']][] = array( 'attribute_id' => $product_attribute['attribute_id'], 'name' => $product_attribute['attribute_name'], 'text' => $product_attribute['text'] ); $product_attribute_group_data[$product_attribute['attribute_group_id']] = array( 'attribute_group_id' => $product_attribute['attribute_group_id'], 'name' => $product_attribute['attribute_group_name'], ); $product_attribute_group_data[$product_attribute['attribute_group_id']]['attribute'] =& $product_attribute_data[$product_attribute['attribute_id']]; } return $product_attribute_group_data; } public function getProductOptions($product_id) { $product_option_data = array(); $product_option_query = $this->db->query("SELECT pov.product_option_value_id, pov.option_value_id, ovd.name as product_option_value_name, od.name as option_name, ov.image, pov.quantity, pov.subtract, pov.price, pov.price_prefix, pov.points, pov.points_prefix, pov.weight, pov.weight_prefix, pov.product_option_id, pov.option_id, o.type, po.required FROM " . DB_PREFIX . "product_option_value pov LEFT JOIN " . DB_PREFIX . "option_value ov ON (pov.option_value_id = ov.option_value_id) LEFT JOIN " . DB_PREFIX . "option_value_description ovd ON (ov.option_value_id = ovd.option_value_id) LEFT JOIN " . DB_PREFIX . "product_option po ON (pov.product_option_id = po.product_option_id) LEFT JOIN `" . DB_PREFIX . "option` o ON (po.option_id = o.option_id) LEFT JOIN " . DB_PREFIX . "option_description od ON (o.option_id = od.option_id) WHERE po.product_id = " . (int)$product_id . " AND od.language_id = " . (int)$this->config->get('config_language_id') . " ORDER BY o.sort_order, ov.sort_order"); $product_option_value_data = array(); foreach ($product_option_query->rows as $product_option) { if (in_array($product_option['type'], array('select','radio','checkbox','image'))) { $product_option_value_data[$product_option['product_option_id']][] = array( 'product_option_value_id' => $product_option['product_option_value_id'], 'option_value_id' => $product_option['option_value_id'], 'name' => $product_option['product_option_value_name'], 'image' => $product_option['image'], 'quantity' => $product_option['quantity'], 'subtract' => $product_option['subtract'], 'price' => $product_option['price'], 'price_prefix' => $product_option['price_prefix'], 'points' => $product_option['points'], 'points_prefix' => $product_option['points_prefix'], 'weight' => $product_option['weight'], 'weight_prefix' => $product_option['weight_prefix'] ); $product_option_data[$product_option['option_id']] = array( 'product_option_id' => $product_option['product_option_id'], 'option_id' => $product_option['option_id'], 'name' => $product_option['option_name'], 'type' => $product_option['type'], 'required' => $product_option['required'] ); $product_option_data[$product_option['option_id']]['option_value'] =& $product_option_value_data[$product_option['product_option_id']]; }else{ $product_option_data[$product_option['option_id']] = array( 'product_option_id' => $product_option['product_option_id'], 'option_id' => $product_option['option_id'], 'name' => $product_option['option_name'], 'type' => $product_option['type'], 'option_value' => $product_option['option_value'], 'required' => $product_option['required'] ); } } return $product_option_data; }
По аналогии поступил с админкой (только опции) и с модулем CSV Product Export. Будьте внимательны при использовании этого кода, он изменен, а значит и vqmod модификации, которые работают с этим участком кода могут работать не так как ожидается.
-
8
-
-
Я так же предоставляю услуги по очистке сайтов от вирусов.
-
1
-
-
Автор пропал :(
Загрузил галереи, а показывает только несколько, куда все остальные делись...вот вопрос...
Всем добрый день. Извиняюсь за отсутствие, семейные дела. Это баг. Исправлен. Вечером выложу обновление. В обновлении так же:
- Исправлен баг с сортировкой
- Исправлен баг использования модуля списка галерей на странице галереи
- Добавлена совместимость с версиями старше 2.1.x (ошибка в админке на странице модулей)
Выход следующей версии планируется не ранее чем через 2 недели. В новой версии планирую:
- добавить поддержку многоуровневых альбомов (по аналогии с категориями в OpenCart).
- добавить Justified Gallery (опционально)
Добавление поддержки вывода галереи в статьи будет рассматриваться отдельно, так как требует вмешательство в движок. Это противоречит концепции модуля и значительно усложняет его поддержку. Хотелось бы решить все без вмешательства в код сайта.
-
От секты:
DELETE FROM oc_product_image pi INNER JOIN oc_product p ON pi.image = p.image WHERE pi.product_id = p.product_id
-
1
-
-
Так обратитесь к автору второго модуля - @serega-lomik, наверняка, он уже встречался с подобным.
-
Случай из ряда - по ситуации. Смотри system/library/image.php функция resize.
-
Готовые вам тут никто не скинет по многим причинам. Думаю, можете не ждать. Но где-то видел генератор товаров.
-
Смотрите index.php и system/startup.php, там все это есть.
В помощь:
-
1
-
-
$action = new Action('feed/yandex_market'); -
А где именно проверяешь переменную? Попробуй операцию присвоения перенести в конструктор контроллера.
-
В том что при таком варианте в $this->$this->my_set; не записывается значения
что такое $this->$this->my_set;
-
Ищите long pooling и push уведомления. Но это уже серверная технология и ее немного трудней внедрять. Работает эта технология так:
С помощью js клиент соединяется с PUSH/Long pool сервером и ждет уведомлений, на протяжении ожидания (30 сек) канал клиент/сервер постоянно открыт. Если на сервере появляется событие, то оно сразу отправляется клиенту по открытому клиентом каналу. Затем, после получения сообщения, клиент снова соединяется и ждет новых уведомлений. Если уведомления не поступили за время ожидания (30 сек), то клиент разрывает связь и открывает ее снова. Таким образом реализованы сообщения в вконтакте и других соц сетях. При этом, если использовать нормальный софт, а не nginx/PHP+MySQL сервер сильно не грузится. Хотя в nginx, вроде была поддержка long pool и он тоже, вроде как, держится. Еще видел скрипт мультиплексор на питоне, он охуенен, он поднять его мне не удалось.
Так же видел платные/бесплатные push сервера с готовым API.
Еще есть jquery.javascript xmpp клиенты.
А по идее если клиентов мало, то париться особо не стоит, вполне хватит setTimeout, только вот желательно всю архитектуру OpenCart не поднимать, а сделать отдельным скриптом с минимумом кода и запросов.
-
сам прикол - это платная тема с не малыми продажами :cry:
К автору тогда, а то у меня работы будет много :ugeek:
-
1
-
[Поддержка] Персонализованные шаблоны
в Другие дополнения
Опубліковано: · Змінено користувачем halfhope
Обновление от 20.06.2016