Jump to content

VladSiy

Пользователи
  • Content Count

    63
  • Joined

  • Last visited

Community Reputation

0 Обычный

About VladSiy

  • Rank
    Пользователь
  • Birthday 07/03/1987

Информация

  • Пол
    Мужчина

Recent Profile Visitors

2,316 profile views
  1. Помогите, пожалуйста, выполнить вот такой запрос: OC3x SELECT product_id FROM . DB_PREFIX . mytable WHERE price > 0 Этот запрос мне нужно добавить в getProductSpecials по пути /model/catalog/product.php. Я подумал про 2 варианта: 1. Расширить существующий sql запрос, он был в одну строку, я попытался его разделить, чтобы было понятнее, но не смог решить свою задачу. И добавлял после product_special строчку . DB_PREFIX . "mytable mt LEFT JOIN " $sql = "SELECT DISTINCT ps.product_id, ( SELECT AVG(rating) FROM " . DB_PREFIX . "review r1 WHERE r1.product_id = ps.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating FROM " . DB_PREFIX . "product_special ps LEFT JOIN " . DB_PREFIX . "product p ON (ps.product_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND ps.customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' AND ((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW()) ) GROUP BY ps.product_id"; 2. Сделать свой запрос ниже: $sql .= "SELECT product_id FROM ". DB_PREFIX . "mytable WHERE price > 0"; Естественно, в обоих случаях ошибки. Мне уже не первый раз приходится прибегать к запросу с LEFT JOIN, читал разные статьи, но, не разобрался. Кажется, в Open Cart чересчур сложный запрос. Хотелось бы понять, как оно работает, может быть кто-то сможет доступно объяснить?
  2. Всему виной моя не внимательность. Может кто-то наступит на такие же грабли, вот решение моей проблемы. Я неправильно упаковал архив. Мой архив выглядел так: test.ocmod.zip -test.ocmod --upload --install.xml перепаковал так: test.ocmod.zip -upload -install.xml И еще удалил пробелы в поиске в xml и все заработало: <search><![CDATA[{{ language }}]]></search>
  3. 1. Если я правильно понял ваше предложение проверить распаковывается ли архив, то да, распаковывается. Проверил с помощью ZipArchive::extractTo. 2. В User Groups у меня вообще нет чекбокса с modification/upload.
  4. Вот это сработало, спасибо. Теперь бы разобраться, как файлы загрузить через установщик.
  5. Перефразируйте, пожалуйста, я не понял, что нужно проверить и где
  6. ocmod.log 2020-03-24 14:05:40 - MOD: Modification Default FILE: system/engine/action.php REGEX: ~(require|include)(_once)?\(([^)]+)~ LINE: 69 FILE: system/engine/loader.php REGEX: ~(require|include)(_once)?\(([^)]+)~ LINE: 77 LINE: 151 LINE: 168 FILE: system/library/config.php REGEX: ~(require|include)(_once)?\(([^)]+)~ LINE: 59 FILE: system/library/language.php REGEX: ~(require|include)(_once)?\(([^)]+)~ LINE: 67 LINE: 73 FILE: system/library/template/template.php REGEX: ~(require|include)(_once)?\(([^)]+)~ LINE: 18 FILE: system/library/template/twig.php CODE: $loader = new \Twig_Loader_Filesystem(DIR_TEMPLATE); LINE: 19 ----------------------------------------------------------------
  7. Столкнулся с проблемой, не могу разобраться, что я делаю не так. OpenCart 3.0.3.2. Я немного расширил функционал магазина. Всю работу я сделал в оригинальных файлах и все работает, как я и хотел. Захотелось познакомиться с ocmod и я подумал всю работу сделать с помощью модификатора. На данный момент я оставил все работающие файлы на своих местах и убрал только 1 файл по пути admin/controller/extension/module/test.php. Если вернуть его на место, то в Extensions->modules появится название моего, так сказать, модуля. Что я сделал: Создал zip архив test.ocmod В архиве находятся файл install.xml и папка upload. В папке upload/admin/controller/extension/module/ есть файл test.php тот, который я убрал. Для теста я хочу его вернуть на свое место с помощью "Installer". В файле install.xml вот что: <?xml version="1.0" encoding="UTF-8"?> <modification> <name>Test</name> <code>test</code> <version>1.0</version> <link>test.test</link> <author>Test</author> <file path="catalog/view/theme/default/template/common/header.twig"> <operation> <search><![CDATA[ {{ language }} ]]></search> <add position="after"><![CDATA[ {{ test }} ]]></add> </operation> </file> </modification> Установка проходит отлично. в Install History появляется запись. В модификаторе и в Developer Settings обновляю все, что есть. И вот сама проблема: В Modification List - ничего нет. В Extensions->modules - ничего нет. По пути system/storage/modification кроме системных папок и файла index.html - тоже ничего нет. Я подумал, что это связано с тем, что я не перенес папку storage за пределы каталога сайта. Только что вынес эту папку, загрузил архив снова, но кроме системных папок и файлов ничего в папке modification нет. Уже не знаю, что пробовать. Читал, что бывает проблема с неправильно настроенным FTP, на 2-ке видел эту вкладку, а на 3-ке не вижу. Подскажите, пожалуйста, что я делаю не правильно, или в чем может быть проблема?
  8. Нужна помощь, не могу разобраться в sql запросе. в /catalog/model/catalog/product.php есть функция: public function getProduct($product_id) { $query = $this->db->query("SELECT DISTINCT *, pd.name AS name, p.image, m.name AS manufacturer, (SELECT price FROM " . DB_PREFIX . "product_discount pd2 WHERE pd2.product_id = p.product_id AND pd2.customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' AND pd2.quantity = '1' AND ((pd2.date_start = '0000-00-00' OR pd2.date_start < NOW()) AND (pd2.date_end = '0000-00-00' OR pd2.date_end > NOW())) ORDER BY pd2.priority ASC, pd2.price ASC LIMIT 1) AS discount, (SELECT price FROM " . DB_PREFIX . "product_special ps WHERE ps.product_id = p.product_id AND ps.customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' AND ((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) ORDER BY ps.priority ASC, ps.price ASC LIMIT 1) AS special,(SELECT points FROM " . DB_PREFIX . "product_reward pr WHERE pr.product_id = p.product_id AND pr.customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "') AS reward, (SELECT ss.name FROM " . DB_PREFIX . "stock_status ss WHERE ss.stock_status_id = p.stock_status_id AND ss.language_id = '" . (int)$this->config->get('config_language_id') . "') AS stock_status, (SELECT wcd.unit FROM " . DB_PREFIX . "weight_class_description wcd WHERE p.weight_class_id = wcd.weight_class_id AND wcd.language_id = '" . (int)$this->config->get('config_language_id') . "') AS weight_class, (SELECT lcd.unit FROM " . DB_PREFIX . "length_class_description lcd WHERE p.length_class_id = lcd.length_class_id AND lcd.language_id = '" . (int)$this->config->get('config_language_id') . "') AS length_class, (SELECT AVG(rating) AS total FROM " . DB_PREFIX . "review r1 WHERE r1.product_id = p.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating, (SELECT COUNT(*) AS total FROM " . DB_PREFIX . "review r2 WHERE r2.product_id = p.product_id AND r2.status = '1' GROUP BY r2.product_id) AS reviews, p.sort_order FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN " . DB_PREFIX . "manufacturer m ON (p.manufacturer_id = m.manufacturer_id) WHERE p.product_id = '" . (int)$product_id . "' AND pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "'"); if ($query->num_rows) { return array( 'product_id' => $query->row['product_id'], 'name' => $query->row['name'], 'description' => $query->row['description'], 'meta_title' => $query->row['meta_title'], 'meta_description' => $query->row['meta_description'], 'meta_keyword' => $query->row['meta_keyword'], 'tag' => $query->row['tag'], 'model' => $query->row['model'], 'sku' => $query->row['sku'], 'upc' => $query->row['upc'], 'ean' => $query->row['ean'], 'jan' => $query->row['jan'], 'isbn' => $query->row['isbn'], 'mpn' => $query->row['mpn'], 'location' => $query->row['location'], 'quantity' => $query->row['quantity'], 'stock_status' => $query->row['stock_status'], 'image' => $query->row['image'], 'manufacturer_id' => $query->row['manufacturer_id'], 'manufacturer' => $query->row['manufacturer'], 'price' => ($query->row['discount'] ? $query->row['discount'] : $query->row['price']), 'special' => $query->row['special'], 'reward' => $query->row['reward'], 'points' => $query->row['points'], 'tax_class_id' => $query->row['tax_class_id'], 'date_available' => $query->row['date_available'], 'weight' => $query->row['weight'], 'weight_class_id' => $query->row['weight_class_id'], 'length' => $query->row['length'], 'width' => $query->row['width'], 'height' => $query->row['height'], 'length_class_id' => $query->row['length_class_id'], 'subtract' => $query->row['subtract'], 'rating' => round($query->row['rating']), 'reviews' => $query->row['reviews'] ? $query->row['reviews'] : 0, 'minimum' => $query->row['minimum'], 'sort_order' => $query->row['sort_order'], 'status' => $query->row['status'], 'date_added' => $query->row['date_added'], 'date_modified' => $query->row['date_modified'], 'viewed' => $query->row['viewed'] ); } else { return false; } } В ней есть sql запрос, в котором я не могу разобраться. На примере акционного товара, подскажите, пожалуйста, как изменить этот запрос так, чтобы он вывел не 1 цену, как сейчас, а все цены, которые установлены во вкладке Акция, например 5 записей. В итоге хотел бы по определенному условию показывать нужную мне цену. Изменение/удаление LIMIT приводит к ошибке.
  9. Спасибо за советы. Решил свою проблемой так: Создал почтовый ящик на хостинге [email protected] и настроил отправку почты в админке CMS через SMTP, используя в качестве сервера почты сервер моего хостинга hosting_name.ru, порт 25, логин и пароль от почты [email protected] с хостинга.
  10. Здравствуйте. OpenCart 2.3.0.2.3 Не так давно возникла проблема, с доставкой писем на ukr.net, вообще не доходят. Временно решили эту проблему так: 1. создал почту на хостинге [email protected], 2. в админке магазина, в поле Email установил почту [email protected], 3. на хостинге с [email protected] перенаправлял на [email protected] Может быть недельку поработало и ситуация повторилась, перестали приходить письма. Потом решили эту проблему добавлением ТХТ-запись с SPF. Снова хватило на пару недель. Вчера перестало работать. Скорее всего проблема в том, что ukr.net проверяет отправителя и он не соответствует домену сайта. В файлах сайта, уже не помню точный путь, где именно я это делал, в строке отправителя я прописывал: $mail->setSender('[email protected]'); кажется я заменял везде, где встречается эта строка, Но в почтовике я вижу: Отправитель: [email protected]_name.ru Письма приходят от системного адреса. Подскажите, пожалуйста, где и каким образом я могу изменить имя отправителя, чтобы письмо отправлялось не с системного адреса, а с моего домена, на котором расположен магазин. Возможно, причина и не в этом, может быть кто-то уже сталкивался с такой проблемой, поделитесь ее решением. PS На Gmail письма приходят без проблем, не теряются. Но штат не хочет менять рабочую почту. Убедить не могу.
  11. Спасибо. "Модуль работает на основе базы данных Sypex Geo...", я использовал ту же базу, в моем случае не сработало. Все же, наверное попробую модуль, может сработает.
  12. Не могу решить одну задачу. OpenCart 2.3.0.2.3 Занимаюсь сайтом сети кафетериев. Торговые точки есть в определенных городах, городов около 10-ка и постоянно добавляются новые. Соответственно сайт привязан к географии. Все было хорошо, пока цены и акции применялись ко всем городам. Но теперь есть задача показывать акционный товар только в 3-ке городов. Я пытался это реализовать с помощью SxGeo. В принципе он работает, но не так точно, как мне нужно. Т.е. 2 города, для которых мне нужно показать акцию - Фастов и Обухов, SxGeo определяет их, как "Киев". Нашел в интернете список блоков ip адресов для этих городов, и по условию менял статус акционного товара на отключенный, а для тех, кто не подходит под условие - активировал. Когда проверял на своем IP адресе - все работало, попросил проверить жителей нужных городов - не работает. В общем этот способ мне не подошел. Решил попробовать другой способ, добавить в админку новое поле с дополнительной ценой, и выставлять цену для акционного города, и потом уже дальше в шаблоне решать, показывать товар или нет. Все, что я мог бы сделать - это статично добавить поля, а они могут меняться очень быстро для разных городов. Оставил я эту затею. В итоге решил спросить вас, может быть подскажите, какой-то способ, который даст мне возможность определить точный город и как-то в админке оформить товар для определенных городов. Может быть есть какой-то недорогой модуль, или приспособить какую-то из существующих в коробке возможностей? Поделитесь, пожалуйста, идеями. Спасибо.
  13. Здравствуйте, нужна помощь. Коротко говоря, мне нужно подредактировать форму так, чтобы в зависимости от выбранного города доставки (выпадающий список), в следующем списке выпадали адреса торговых точек относящихся к выбранному городу и выбор добавился в письмо, такого типа: самовывоз из магазина по адресу ... здесь то, что выберет клиент. Я думаю это сделать таким образом: в админке можно добавить "местоположение". Сюда добавил несколько городов с адресами ТТ. На странице оформления заказа вывел этот список адресов. С помощью JS и Jquery привязался к выпадающему списку городов/регионов. По событию "onchange" получаю выбранный город, Ajax-м отправляю этот город в созданный контроллер. Теперь мне надо сделать выборку адресов в модели location в функции getLocation, только дописать туда условие, чтобы выводить только те, которые соответствуют имени города. У меня все это получается сделать, только, если в модели вручную пропишу имя города, или, если отправленный ajax-ом город добавлю в сессию. У меня есть вопросы, прошу подскажите, пожалуйста, желательно с наглядными примерами: 1. Могу ли я сделать все это немного проще? Возможно я уж слишком намудрил 2. Как можно передать данные с именем города из контроллера в модель localisation/location без сессии? 3. Как обновить блок без перезагрузки страницы, чтобы там отобразился результат выборки, если без сессии нельзя? Если, не возможно помочь теоретически, но, желательно подробнее, то я со временем распишу проблему более подробно и приведу куски кода. Спасибо.
  14. Кажется получилось сделать мультимагазин с помощью алиасов, пока только на локалке. На данный момент, кажется все устраивает, но что-то, возможно, просто не учел. Немного страшно переделывать работающие магазины Допустим, я решился, мне придется удалить сайты и бд с поддоменов. Не уничтожу ли я таким образом сайты, в отношении видимости для поисковиков? Еще мне нужно перевести все магазины на https, это делается, как для обычного сайта?
  15. Я читал, что для каждого поддомена необходимо устанавливать CMS и указывать одну БД. В таком случае, в принципе, не вижу смысла делать мультимагазин, по сути я сейчас имею тоже самое, только не могу перейти на сайт из админке. Как сделать один набор фалов?
×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.