Перейти к публикации
  • разработка интернет магазинов на opencart
  • доработка интернет магазинов на opencart

fortoonas

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

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

  • Посещение

Все публикации пользователя fortoonas

  1. fortoonas

    [Решено] знаки валюты HTML

    Иногда есть необходимость обернуть символ в HTML теги. Для этого нужно в базе изменить изменить тип данных полей symbol_left и symbol_right в таблице oc_currency (к примеру на VARCHAR(120)). А затем в system/library/cart/currency.php раскодировать вывод html сущностей foreach ($query->rows as $result) { $this->currencies[$result['code']] = array( 'currency_id' => $result['currency_id'], 'title' => $result['title'], 'symbol_left' => html_entity_decode($result['symbol_left'], ENT_QUOTES, 'UTF-8'), 'symbol_right' => html_entity_decode($result['symbol_right'], ENT_QUOTES, 'UTF-8'), 'decimal_place' => $result['decimal_place'], 'value' => $result['value'] ); именно вот здесь 'symbol_left' => html_entity_decode($result['symbol_left'], ENT_QUOTES, 'UTF-8'), 'symbol_right' => html_entity_decode($result['symbol_right'], ENT_QUOTES, 'UTF-8'), Теперь символ валюты, можно обернуть в тег и на всём сайте стилизовать отдельно этот символ.
  2. Кстати Да, если оплату не нужно принимать на сайте, то лучше использовать метод оплаты "Банковский перевод", этот метод не запускает скрипт "перехода к оплате". В фильтре отчета "Продажи-Заказы" добавили новую опцию "потерянные заказы". Если я не ошибаюсь то в старых версиях ОС, этой опции раньше не было, и приходилось эти так называемые "потерянные заказы" искать только в базе через запрос: "SELECT * FROM `oc_order` WHERE order_status_id = 0". Это в принципе тот же самый запрос который выполняет отчет "Продажи-Заказы" при выборе статуса "потерянные заказы" в фильтре. Как я уже сказал, "потерянные заказы" это заказы без статуса. То есть их статус это 0. Когда происходит подтверждение заказа клиентом (это когда клиент уже нажимает кнопку подтвердить заказ), система запускает скрипт controller/checkout/confirm.php. Этот скрипт создаёт запись в базе на заказ клиента со статусом 0. (то-есть на данный момент у этого заказа нет статуса, но он уже содержит имя клиента, адрес, сумму, продукты итд...) Затем запускается скрипт который отвечает за перевод денежных средств. Какой скрипт оплаты запустится системой ОС зависит от того какой тип оплаты был выбран клиентом при заказе. Эти скрипты хранятся в controller/payment/*.php. Когда скрипт получает сообщение о переводе денежных средств от системы оплаты (например PayPal или SagePay) то находит недавно созданную запись заказа в базе (без статуса) и даёт статус заказу в зависимости от полученного сообщения. Сообщение о переводе от системы оплаты может быть разное, например Отказано, Не удалось, в ожидании, Завершено, итд. Вот так вот выглядит скрипт оплаты через PayPal. Я подозреваю что периодически происходит какой-то сбой в скрипте оплаты. То есть возможно периодически он НЕ получает какое либо подтверждение от системы оплаты (даже если это метод "Оплата при доставке"), и в связи с этим не может дать статус заказу. Таким образом этот заказ остаётся без статусным (утерянным) для систему ОС. В таком случае скрипт даже не будет выдавать ошибку (но это уже зависит от того как он был написан). В принципе email клиенту тоже будет отправлен, что заказ был осуществлён. Какую систему оплаты используют ваши клиенты? Нужно посмотреть, что скрипт делает в случае если он НЕ получает сообщение от системы оплаты. https://forum.opencart.com/viewtopic.php?t=126001
  3. Добавлю, что utf8_strlen utf8_substr это пользовательские методы хелпера Opencart, которые находятся в файле system\helper\utf8.php К примеру: function utf8_strlen($string) { return mb_strlen($string); }
  4. Этот как раз пример адаптации старой версии кода, на более новую OC2.3 в OC3 уже другой вариант $this->model_setting_extension->install('dashboard', $this->request->get['extension']); $this->model_setting_extension->uninstall('dashboard', $this->request->get['extension']);
  5. Я ремонтировал сайт с похожей проблемой (OC3), раннее не сталкивался с изучением вопроса "как выводятся данные на странице Dashboard". Настройки Dashboard (показывать-не показывать, редактировать-не редактировать, вкл-выкл) записаны в разных таблицах. oc_user_group oc_extension oc_setting Но в моём случае была испорчена таблица oc_setting Но нужно учитывать, что таблицы наполняются при включении модулей на странице site.com/admin/index.php?route=marketplace/extension (вкладка Dashboard) в файле admin/controller/extension/extension/dashboard.php в разных версиях OC немного отличается код К примеру в ОС3.0.3.8 $this->model_setting_extension->install('dashboard', $this->request->get['extension']); этой строкой кода происходит включение модулей dashboard в таблице oc_extension
  6. Причины действительно могут быть разными, к примеру у меня ровно в такой-же ситуации, причина была в том что, при не достаточной безопасности, недобрые люди, закинули файл, который немного сломал базу. Пришлось просто бекап базы восстановить.
  7. Действительно! Просто зачем-то вставили звёздочки(обязательное поле) и поэтому машинально вводит в заблуждение. Надо будет у себя исправить и убрать эти звёздочки или написать модификатор который убирает звёздочки или вставит подсказку (типа можно сохранять и без пароля)
  8. @Rassol2 Простите что прерываю такую интересную тему) Может я пропустил.....как Вы устроились в Америке? Есть смысл туда переезжать сейчас?
  9. В принципе я и сам так начал думать, когда начал использовать языки программирования для своих задач. Т.е подумал. что большинство использующих языки, это "пользователи языка" или "администраторы языка", а настоящие программисты это люди создающие интерпретаторы и компиляторы, подумал я). Но для "простых людей" это будет некая путаница, поэтому я считаю, что лучше трактовать так, "все кто используют так или иначе языки, и есть программисты того или иного уровня". Потому-что людей написавших компиляторы пару сотен на весь мир, а использующих языки миллионы.
  10. Просто....удивительно) Когда человек решает вопросы программирования, делает свои модули и считает себя не программистом. Кто-же тогда такой программист? И да, я читал статью, где человек описывал как он себя не считает программистом программируя много лет, по-моему это субъективно.
  11. Может в этом загвоздка...не помню чтобы мне такое приходило
  12. @Tom Ты в 2013 ещё не был программистом?
  13. Да, там можно и через доступ для стороннего приложения и без него. Я перепробовал все варианты. Там у почтовиков сейчас какие-то глобальные изменения происходят. К примеру в mail сделали VK WorkSpace (бизнес почта на домене), а яндекс-коннект переезжает на Яндекс 360 для бизнеса.
  14. Казалось-бы какие проблемы)) Я настраивал SMTP десятки раз, но.... Вот сейчас столкнулся с настройкой SMTP на шаред timeweb и ни ssl://smtp.mail.ru, ни ssl://smtp.yandex.ru, не заработало. Техподдержка всячески отнекивалась, типа "ваш скрипт в опенкарт не отрабатывает", хотя скрипт не менялся и я проверил ещё и ещё раз. Конечно нужно учитывать, что МХ записи, нужно писать с точкой в конце MX 10 mx.yandex.net. (с точкой в конце) MX 10 emx.mail.ru. (с точкой в конце) при этом у них при создании МХ, есть функционал "выбрать почту" и там автоматическая вставка без точки. Во общем, после недельной переписки. пришлось создать почту на хостинге и настроить через smtp.timeweb.ru, а потом ещё день подождать пока что-то обновиться по их словам, потому-что почта приходила с задержкой в полтора часа)) А ещё на почту https://webmail.timeweb.ru приходили письма, в которых вырезались картинки. Техподдержка не смогла дать ответ (хотя потом случайно увидел в правом верхнем углу кнопку "нажать, чтобы отображать изображения"), но посоветовали перейти на новых формат их почты https://roundcube.timeweb.ru где картинки не вырезаются.
  15. А чтобы загрузить модификатор через загрузчик в папку system, нужно просто создать структуру такого вида test.ocmod.zip -> upload -> system -> test.ocmod.xml
  16. Автор помог, блок с "Селектором пагинации" должен быть внутри блока с "Селектором контейнера товаров", тогда всё работает) В целом хороший фильтр, спасибо автору!!!
  17. Проверял. Точной инструкции нет, поэтому вероятно правильно. А куда ссылку прислать, в личку?
  18. @reDream Добрый вечер! Проблема с пагинацией. Я Нашёл несколько вариантов в данной теме о пагинации, но видимо у меня в другом проблема. К примеру на странице с товарами (200 товаров), есть 3 шт ванная и 42 шт детская. Когда я фильтрую по детской, то пагинация работает, а когда по ванной, то она исчезает и появляется только после перезагрузки страницы. Может уже была подобная ситуация?
  19. Всем привет! Кто в курсе такой ошибки? Установил последнюю ocstore на локалку(может из-за этого?), захожу в "Магазин дополнений" нажимаю на любое дополнение и вылетает ошибка Fatal error: Uncaught Exception: Error: Could not load helper HTMLPurifier.auto! in W:\domains\ocStore-3037\storage\modification\system\engine\loader.php:170 Stack trace: #0 W:\domains\ocStore-3037\admin\controller\marketplace\marketplace.php(606): Loader->helper('HTMLPurifier.au...') #1 W:\domains\ocStore-3037\storage\modification\system\engine\action.php(79): ControllerMarketplaceMarketplace->info() #2 W:\domains\ocStore-3037\admin\controller\startup\router.php(26): Action->execute(Object(Registry), Array) #3 W:\domains\ocStore-3037\storage\modification\system\engine\action.php(79): ControllerStartupRouter->index() #4 W:\domains\ocStore-3037\system\engine\router.php(67): Action->execute(Object(Registry)) #5 W:\domains\ocStore-3037\system\engine\router.php(56): Router->execute(Object(Action)) #6 W:\domains\ocStore-3037\system\framework.php(169): Router->dispatch(Object(Action), Object(Action)) #7 W:\domains\ocStore-3037\system\startup.php(104): require_once('W:\\domains\\ocSt...') #8 W:\domains\ocStore-3037\admin\index.p in W:\domains\ocStore-3037\storage\modification\system\engine\loader.php on line 170
  20. Странно что у кого-то не получилось сделать упрощённый вариант. Проверьте ещё раз. откройте файл catalog/controller/startup/seo_url.php найдите код } elseif ($key == ‘path’) { вставьте до него следующий код } elseif ($data[‘route’] == ‘common/home’) { $url .= ‘/’; unset($data[$key]); В итоге должно получится так: if ($query->num_rows && $query->row[‘keyword’]) { $url .= ‘/’ . $query->row[‘keyword’]; unset($data[$key]); } } elseif ($data[‘route’] == ‘common/home’) { $url .= ‘/’; unset($data[$key]); } elseif ($key == ‘path’) { $categories = explode(‘_’, $value); PS данная конструкция применима к следующим версиям движка: Opencart2: 2.0.0.0, 2.0.1.0, 2.0.1.1, 2.0.2.0, 2.0.3.1, 2.1.0.1, 2.1.0.2, 2.2.0.0, 2.3.0.0, 2.3.0.1, 2.3.0.2 Opencart3: 3.0.0.0, 3.0.1.1, 3.0.1.2, 3.0.2.0, 3.0.3.0, 3.0.3.1, 3.0.3.2, 3.0.3.6 Чтобы работало, нужно после добавления кода обязательно проверить чтобы в корне был файл .htaccess и в настройках включить сиcтема->настройки->сервер->Включить ЧПУ
  21. Как прослушать событие на view, к примеру эта-же страница при запросе к контролеру site.com/index.php?route=checkout/success происходит событие view $this->response->setOutput($this->load->view('common/success', $data)); Если я правильно понял, то делаю так $this->model_setting_event->addEvent( 'notificationTelegram', 'catalog/view/theme/modern/template/common/success/after', 'extension/module/notificationTelegram/sendOrderAlert'); Но так не срабатывает....
  22. @karpo518 Пока не знаю ответ на твой вопрос, по скольку только начал использовать события в ОС-3 Но благодаря тебе, не явно нашёл ответ на свой вопрос. У меня срабатываю события для model, потому что слушаю событие отработанного метода(функции) addBocorderHistory. $this->model_setting_event->addEvent('notificationTelegram', 'catalog/model/extension/module/bocorder/addBocorderHistory/after', 'extension/module/notificationTelegram/sendOrderAlert'); А события контролеров не срабатывали, потому-что я обращался в методу index каждого контролера вот так checkout/success/index/after Но увидел что ты просто обратился к файлу контролера и понял что index отрабатывает "автоматом". Поэтому у меня начало срабатывать и события контролера checkout/success $this->model_setting_event->addEvent('notificationTelegram', 'catalog/controller/checkout/success/after', 'extension/module/notificationTelegram/sendOrderAlert'); А вот с View пока не разобрался)
  23. Вот если-бы можно записать id в базу, остальное решаемо) Я ведь беру ссылку донора(любого вида) и превращаю её не только в артикул, но и в id, дальше всё логично и понятно(мы увидим взаимосвязь всех id между собой)..
×
×
  • Создать...

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

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