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

Pascha

Разработчик
  • Постов

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

  • Посещение

Весь контент Pascha

  1. Стандартное исполнение интернет-магазина на движке OpenCart позволяет выполнить покупателю и продавцу выполнить элементарные вещи, это найти интересующий товар в каталоге, положить его в корзину, и оформить заказ. Иногда этого бывает вполне достаточно для функционирование простого магазина на OpentCart. Однако рано или поздно те или иные доработки интернет-магазина приведут к тому, что возникнет необходимость оперировать дополнительными данными в системе. Как мы знаем в администраторской части по умолчанию предусмотрено множество полей с различными данными, однако не все из них показываются в публичной части сайта, далее речь пойдет о данных в карточки товара. В этом посту рассмотрим простой пример, как можно вывести артикул в OpenCart на карточке товара. Артикул товара вы можете заметить в администраторской части, на форме редактирования товара. В публичной части его нет, да и не всегда он бывает нужен. Однако, когда возникнет потребность в его использовании, у вас есть возможность вывести его. Итак, если вы немного знакомы с тем как работает движок, у вас уже есть представление о контроллере, и виде. Данная концепция разделения кода и отображения (MVC) в целом используется в подавляющем большинстве движков, по этой причине если вам уже приходилось сталкиваться с подобным, вам будет проще. Первым делом, нужно добавить данные в контроллере, чтобы в последующем ими можно было воспользоваться в «виде» страницы. Откройте файл контроллера: catalog/controller/product/product.php Далее следует найти строку вида: $data['model'] = $product_info['model']; Добавьте перед этой строкой или после строку: $data['sku'] = $product_info['sku']; Передавая в массив данные с ключом sku в шаблоне отображения страницы, мы теперь получим переменную $sku, в которой собственно и будет находиться значение артикула. Таким образом, при надобности можно производить какие-либо манипуляции с данными, мы же просто выведем значение этой переменной в шаблоне активной темы. Откройте шаблон отображения страницы товара: catalog/view/theme/mytheme/template/product/product.tpl Далее найдите следующую строку кода: <li><?php echo $text_model; ?> <?php echo $model; ?></li> Добавляем вывод значения переменной $sku: <?php if($sku): ?> <li>Артикул: <?=$sku;?></li> <?php endif; ?> В примере мы название параметра «Артикул» прямо в самом шаблоне. Хорошим тоном является выводить данные значения в языковые файлы. Это избавить вас от лишней волокиты при переключении языков на сайте. Добавить значение в языковой файл не составляет большого труда, давайте это сделаем. Первым делом следует добавить значение в языковой файл, который располагается по следующему пути: catalog/language/язык_сайта Добавляем в начале или в конце строку: $_['text_sku'] = 'Vendor Code:'; // для анг. языка $_['text_sku'] = 'Артикул:'; // для русского языка Далее, как и говорилось ранее, чтобы воспользоваться значениями в самом шаблоне отображения, в контроллере следует добавить данные в массив: $data['text_sku'] = $this->language->get('text_sku'); Имя параметра будет взято в соответствии с текущим языком сайта. В свою очередь в шаблоне отображения следует вписать переменную $text_sku таким образом: <li><?= $text_sku; ?> <?=$sku;?></li> После сохранения изменений самое время проверить результаты правок. Если всё было верно, то в качестве значения в переменной $text_sku будет передано название параметра SKU на языке сайта, а в переменной $sku будет передано значение самого артикула.
  2. При проектировании сайтов довольно часто приходится использовать некоторые функции, которые могут вызываться из разных частей сайтов. Не редко такие функции так же могут переносится между проектами, с их модификацией либо без них. В связи с этим удобном способом их можно выносить в отдельный файл, после чего подключать данный файл в нужных участках веб-приложения. Здесь мы рассмотрим похожую ситуацию, где требуется разместить некие функции в OpentCart так, чтобы они были доступны во всём проекте. Для этого можно воспользоваться возможностью создания хелпера (helper), который собственно прекрасно справляется с этой задачей. Термин хелпер может быть вам знаком, т.к. часто используется в различных фреймворках. В OpenCart helper-ы размещаются в директории /system/helper. Для этого вам нужно создать файл, который в последующем вы будете подключать в скриптах. Добавим некую функцию для примера это будет функция token, которая будет генерировать некий случайные наборы символов. <?php function token($length = 32) { // Create token to login with $string = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; $token = ''; for ($i = 0; $i < $length; $i++) { $token .= $string[mt_rand(0, strlen($string) - 1)]; } return $token; } Далее есть два способа включения хелпера в проект. Первый подразумевает постоянное включение хелпера при загрузке приложения. Второй можно включать в отдельных участках кода, что в свою очередь более предпочтительно в вопросе производительности приложения, если хелпер содержит значительное количество кода. Подгружаем хелпер для всего проекта OpenCart Чтобы подгрузить хелпер для всего проекта, можно подключить файл непосредственно в загрузчике /system/startup добавив строку: require_once(DIR_SYSTEM . 'library/myhelper.php'); Файл myhelper.php в этом случае это ваш хелпер, который размещен в директории /library. После этого можно обращаться к функциям и классам, которые находятся в этом файле. Включение хелпера в отдельных скриптах OpenCart Если хелпер содержит значимый в вопросах производительности код, и не на всех частях сайта используется, то рекомендуется подключать хелпер используя встроенный загрузчик OpenCart. В этом случае ваш хелпер следует разместить в директории /system/helper. В коде подключение хелпера будет выполняться таким образом: $this->load->helper('helper_name'); В качестве значения helper_name следует указать имя файла без расширения php, т.к. сам движок будет дописывать этот суффикс при загрузке. Обращение к функции следует выполнять напрямую, без использования переменной экземпляра класса $this. $this->load->helper('myhelper'); token(); В результате выполнения данного кода, будет подключен файл хелпера, который находится в файле /system/helper/myhelper.php, где объявлена функция token(), после чего будет произведено обращение к этой функции.
  3. Перед тем как приступить к самому примеру, давайте разберемся что представляет из себя опция товара в системе OpenCart 2.x. Каждый товар в интернет магазине может иметь набор определённых свойств и характеристик. Ярким примером такой разновидности может быть цвет, размер, и другие параметры, которые так же могут характеризовать какую-либо разновидность товара. В каталоге, таким образом, отображается карточка товара, с возможностью выбора параметров для покупателя. В корзину товар попадает именно в таком виде, каким его выбрал пользователь. По умолчанию в стандартных шаблонах карточка товара этот функционал уже содержит, и производить манипуляции с кодом добавления товара в корзину как правило не возникает. Но как только вы отходите от стандартного функционала шаблонов, возникает необходимость находить решения различного рода задач. Итак, товар в корзину добавляется через ajax посредством функции cart.add. Если посмотреть на код ajax-запроса, то мы можем заметить участок кода похожий на этот: $.ajax({ url: 'index.php?route=checkout/cart/add', type: 'post', data: 'product_id=' + product_id + '&quantity=' + (typeof(quantity) != 'undefined' ? quantity : 1), ... В параметре data как раз и передаются все основные данные о товаре для POST-запроса. Всё что следует сделать для передачи опции товара, немного видоизменить передачу параметров, создав отдельный объект JS. var productData = { 'product_id' : PRODUCT_IDS.CARD, 'quantity': 1, 'option': { '229': "Some option value" } }; Как вы можете заметить в параметре запроса появилось значение option. Передавая это значение, в корзину попадает указанный товар, с обозначенной опцией. В остальном передача данных происходит аналогичным образом. $.ajax({ url: 'index.php?route=checkout/cart/add', type: 'post', data: $.param(productData), dataType: 'json', success: function (json) { }, error: function (xhr, ajaxOptions, thrownError) { } }); На стороне сервера в php-скрипте параметр option по умолчанию обрабатывается такой строкой: if (isset($this->request->post['option'])) { $option = array_filter($this->request->post['option']); } else { $option = array(); } Изменять на стороне php-скрипта в этом случае ничего не нужно, код показан для информации. Администраторы сайта добавляют товары, а также опции товаров и их ценовое значение. После того как покупатель кладёт товар в корзину, цена так же будет пересчитываться в зависимости от выбранной им опции. Ценовая сетка так же предварительно проставляется при добавлении значений опций. Т.е. каждое значение опции может определять ценообразование товара.
  4. OpenCart как одна из популярных систем управления интернет-магазинами содержит в базовом наборе функционал налогообложения товаров. В большей части данный функционал широко используется европе и западных странах, где принято указывать так же налог на приобретаемый товар. Давайте рассмотрим возможность использования данного функционала в вашем интернет-магазине. Всё что будет рассказываться далее, реализовано в базовом шаблоне OpenCart, мы поговорим о том, как это работает и как это настраивается. Итак, цены у товаров в каталоге могут отображаться вместе с налогами и отдельно от налогов. Эта опция может использоваться, когда есть необходимость показывать налог для покупателей отдельно от стоимости товара. Отключение показа цен с налогами Отключается эта опция в настройках магазина, параметр «Display prices with tax». Admin > System > Settings > Store > Options Админ > Система > Настройки > Магазин > Настройки Геозоны для налогов Налоговые ставки в OpenCart могут разделяться по геозонам. Это применяется для магазинов, где есть необходимость разделения налогов в зависимости от локации покупателя. Если нет необходимости делить по геозонам, то вам достаточно создать одну запись которая послужит общей для всех налоговых ставок. Admin -> System -> Localization -> Geozones Админ -> Система -> Локализация -> Геозоны Добавление ставки налога Теперь можно добавить налоговую ставку, с указанием типа наложения налога, к примеру, самое популярное — в виде процентов. В свою очередь налоговая ставка привязывается к геозоне, поле Geo Zone. Admin > System > Localisation > Taxes Админ > Система > Локализация > Налоги Добавление класса налога Далее следует создать класс налогов. Налоговый класс подразумевает привязку налоговых ставок к местоположениям указываемым покупателем. В данном случае это Shipping Address – адрес доставки. Админ > Система > Локализация > Налоги Admin > System > Localization > Taxes Указываем класс налога в товаре После того как налоги настроены, в самом товаре так же следует указать класс налога, который будет применяться при покупке товара пользователем. Catalog > Products > [Product] > Data Каталог > Товары > [Товар] > Данные Как правило, создаются один или несколько классов налога, которые в последующем указываются во всех товарах в пределах каталога. С первого взгляда, механизм работы налогообложения товара может показаться сложным, но стоит один раз понять, как это работает, то всё это довольно просто.
  5. Практически на каждом сайте так или иначе может использоваться код написанный на JavaScript. Задачи, выполняемые кодом, написанным на JavaScript абсолютно разные. В первую очередь это конечно связано с работой интерфейса сайта. Если один и тот же код используется на разных страницах, то его как правило выводят в отдельный файл. Преимуществ отдельного подключения скриптов достаточно. Разделение верстки и самого кода так же позволяет удобно работать с данными, динамически подключая их на нужных страницах сайта. В данном посту мы поговорим о том, как можно подключить свои скрипты в системе OpenCart. Как и в большинстве движков, в OpenCart заложено разделение исполняемого кода от самого шаблона отображения. Шаблоны сайта лежат в отдельной отведенной для этого директории. И вопрос стоит в том, каким же образом можно подключать свои скрипты в этих шаблонах. Подключение скриптов непосредственно в шаблоне OpenCart Пожалуй, первое и самое элементарное это подключение скриптов непосредственно в самих файлах шаблона. Шаблон заголовка страницы мы можем найти по пути: /catalog/view/theme/default/template/common/header.tpl Мы можем прописать подключение без использования дополнительных обращений к программной части на сервере. Прописав в заголовке страницы код подключения скрипта JavaScript всё будет работать обычным образом: Стоит сказать, что это один из простых вариантов подключения. Скрипт в этом случае будет подключаться на всех страницах где показывается данный шаблон. Однако потребность в подключения скриптов на каждой страницы может быть не везде. Динамическое подключение скриптов в OpenCart Довольно часто требуется подключать скрипты в отдельных случаях, вместо того чтобы показывать их на всех страницах. Особенно если скрипты довольно увесистые, и могут занимать некоторое время при загрузке страницы. Конечно же для этих случаев в OpenCart предусмотрена возможность динамического подключения скриптов к шаблонам сайта. Подключать их можно непосредственно в самих контроллерах нужного класса. Чтобы сделать аналогичное подключение, описанное выше, только через контролёр, необходимо в файле: /catalog/controller/common/header.php Прописать запись вида: $this->document->addScript('catalog/view/javascript/bootstrap/js/bootstrap.min.js '); Таким образом, чтобы подключить в нужных разделах сайта отдельные скрипты, мы можем делать это посредством записи в классах котроллера отдельных разделов. Выводятся данные в шаблоне посредством такого кода в заголовке: <?php foreach ($scripts as $script) { ?> <script src="/<?php echo $script; ?>" type="text/javascript"></script> <?php } ?> Динамическое подключение скриптов в произвольных блоках шаблона Подключение скриптов иногда требуется выполнять к примеру, не в самом заголовке странице, а в нижней части сайта. Особенно это часто рекомендуют делать различные сервисы по оптимизации скорости загрузки страниц сайта. По этой причине возникает необходимость подключения скриптов в «подвале» сайта. Этот момент разработчики OpenCart тоже учли, и возможность такого подключения своих скриптов так же присутствует. Функцию подключения скриптов в OpenCart выполняет библиотека Document, которая располагается тут: /system/library/document.phpsystem/library/document.php Изучив код библиотеки можно заметить, что у метода addScript так же может быть использован второй аргумент — position. В качестве значения по умолчанию для этого аргумента присвоено – header. Вы, наверное, уже догадались, этот параметр может определять назначение подключаемого файла для конкретных участков разметки. И для того чтобы подключить наш файл JavaScript в footer, достаточно при подключении добавить второй параметр: $this->document->addScript('catalog/view/javascript/bootstrap/js/bootstrap.min.js','footer'); Для вывода в контроллере footer-а должен присутствовать код получения скриптов в таком виде: $data['scripts'] = $this->document->getScripts('footer'); Данные шаблону с контролёра передаются в виде массива. И уже в шаблоне данными массив прописывает строки подключения скриптов посредством цикла foreach. Как подключить CSS-файл в OpenCart? Как мы знаем для работы сайтов также используются CSS-файлы стилей. По аналогии со скриптами, подключать файлы стилей мы можем на отдельных страницах сайта. Про то как прописать непосредственно в шаблоне статическую запись мы пропустим. Давайте лучше подключим CSS-файл правильным образом, и позже я поясню почему. Чтобы подключить CSS-файл, в классе контроллера прописать код такого вида: $this->document->addStyle('catalog/view/javascript/slick/slick.css'); Вместо addScript мы указываем addStyle, это означает что выводиться они так же будет в шаблоне, посредством такого кода: <?php foreach ($styles as $style) { ?> <link href="/<?php echo $style['href']; ?>" type="text/css" rel="<?php echo $style['rel']; ?>" media="<?php echo $style['media']; ?>" /> <?php } ?> Подключать файлы стилей рекомендуется именно посредством использования функционала библиотеки Document. Это связано с тем, что перед тем как отдаваться в браузер сам OpenCart так же может выполнять оптимизацию и сжатие файлов. К тому же, если проект довольно масштабный, код стилевого оформления может занимать значительные размеры. Разделяя страницы по разным типам, достаточно будет подключать нужный стиль, для нужной страницы. Такой метод положительно влияет на скорости отрисовки страницы в браузере.
  6. Подавляющее большинство интернет-магазинов так или иначе оперируют данными количества товара на сайте. Учёт остатков товара позволяет контролировать физическое наличие товара, и в случае необходимости обрабатывать заказы в нужном порядке. В системе OpenCart уже с коробки заложен механизм учёта остатков. Вы можете отслеживать изменение количества остатков товара в каталоге, и при необходимости ограничивать возможность заказа товаров, которых уже нет. Это бывает особенно важно, когда учёт количества доступных товаров ведётся непосредственно на сайте. Однако бывают ситуации, когда учёт остатков не имеет большой значимости для ведения интернет-магазина. К примеру, если в вашем каталоге могут быть товары в электронном виде, услуги, либо просто товары, заказывать которые могут покупатели в неограниченном количестве. По умолчанию, при заказе в каталоге на OpenCart ведется вычитание остатков товара. При достижении лимита остатка, пользователь не сможет выполнять заказы, а администратор сайта будет видеть товары с недостающим количеством. Отключить учёт остатка товаров при оформлении заказа можно в администраторской части сайта. Таким образом, покупатель сможет заказывать неограниченное количество товаров на сайте. Что касается администраторской части сайта, то учёт количества товаров так же будет вестись. При достижении количества товаров равным меньше единицы, учёт будет вестись уже в минусовую сторону. На работу интернет магазина в этом случае это никак не будет влиять, и будет носить чисто информационный характер. Вы можете отключить показ остатков товара на сайте. Это позволит пользователям интернет-магазина заказывать товары при нулевом остатке. Отключается контроль остатков в настройках интернет магазина. Для этого вам следует перейти в раздел: Для англоязычной версии System > Settings > { edit — править нужный} > вкладка «Option» > Пункт «Stock» Для версии на русском Система > Настройки > { править нужный } > вкладка «Опции» > Пункт «Склад» В моём примере используется версия OpenCart 2.3 на английском языке, поэтому немного поясню. Тут есть три ключевых параметра «Display Stock» – определяет, будут ли показываться остатки товаров в карточке товара. Второй параметр «Show Out Of Stock Warning» — параметр который указывает на то, что будет ли показываться уведомление в корзине, если количество товаров недостаточно для заказа. Третий параметр «Stock Checkout» — по сути основной параметр, который и определяет будет ли учитываться остаток при заказе или нет. Если будет учитываться остаток, то заказ товаров недостающий по остатку будет невозможен. Собственно, это всё что касается остатков товара на складах.
  7. Практический каждый более или менее наполненный товарами интернет-магазин использует некоторые критерии сортировки товаров на сайте. В одном интернет магазине это может быть показ по дате добавления, в другом же это сортировка по популярности того или иного продукта. Сортировка товаров в интернет магазине позволяет выставлять элементы в нужном порядке. Это позволяет существенно оптимизировать реализацию товаров на витрине и конечно же вопрос релевантности никто ещё не отменял. Понятие релевантности в сети интернет сегодня уже используется довольно широко, начиная от поисковых систем, заканчивая сайтом с новостной лентой. И это хорошо работает, когда популярные записи всегда стремятся в топ, а менее просматриваемые уходят в низ по списку. Однако в одних случаях это работает в автоматическом режиме, в других выставляется вручную. В обеих случаях есть свои преимущества и недостатки. В данной заметке мы поговорим про сортировку товаров в OpenCart. Поле «Порядок сортировки» в OpenCart В движке OpenCart как и во многих других движках существует поле, обозначаемое как «Порядок сортировки» товара. При редактировании карточки товара, мы можем видеть такое поле (у меня версия OpenCart 2.3 на анг. языке): Как уже ясно из самого названия, оно используется для выставления значения позиции в каталоге для конкретного товара. Таким образом, в каталоге товары могут быть выстроены в нужном порядке вручную. При сортировке товаров по этому полю, выборка элементов происходит посредством указанной в запросе ORDER BY sort_order. Запрос в базу как правило производится из самого модуля. Сортировку товаров в OpenCart по умолчанию мы можем выставлять различным образом, и далее речь пойдёт об этом. Как поменять сортировку товаров в OpenCart по умолчанию Существуют множество полей, по которым мы может выполнять сортировку товаров в каталоге. Некоторые системы позволяют настраивать подобные вещи непосредственно в администраторской части сайта. В OpenCart это делается программно, т.к. всё же нет постоянной необходимости менять поле, по которому будут сортироваться товары в каталоге. Как уже говорилось выше, запрос в базу данных выполняется из самого модуля. Однако порядок выборки товаров мы может задавать через контроллер. По этой причине нет необходимости лезть в код модуля, куда целесообразнее это сделать через контроллер. Контроллер, который участвует в выводе товаров категории в OpenCart располагается по такому пути: /catalog/controller/product/category.php Открыв данный файл, следует найти запись такого вида: if (isset($this->request->get['sort'])) { $sort = $this->request->get['sort']; } else { $sort = 'p.sort_order'; } В общем запись которая находится в условии else обозначает значение по умолчанию. Таким образом, переменная $sort определяет имя поля по умолчанию, которое будет использовано для сортировки товаров. Поменяв имя поля на другое, мы можем изменить поле, по которому будет сортироваться товары в категории. Существуют некоторое множество полей, по которому мы можем сортировать товары в каталоге. Далее поговорим об этих полях. Поля доступные для сортировки в OpenCart Есть несколько ключевых полей в базе данных, по которым целесообразно выполнять сортировку товаров: ‘pd.name’, — Наименование товара; ‘p.model’, — Поле, обозначающеии модель товара; ‘p.quantity‘, — Поле, обозначающее остаток товара на сайте; ‘p.price’, — Поле с ценой товара; ‘rating’, — Поле с рейтингом товара; ‘p.sort_order’, — Отдельное поле для ручной сортировки; ‘p.date_added’ — Поле с датой добавления товара; Для примера, если мы хотим поменять сортировку товаров в каталоге по дате добавления, нам следует в переменной $sort выставить значение p.date_added. Кроме того, существуют так же возможность указания направления сортировки (ASC или DESC). Для этого используется переменная $order, которая может содержать два значения: ASC – сортировка по возрастанию; DESC – порядок сортировки по убыванию. В большинстве случаем, изменения этих двух параметров бывает достаточно. После внесения изменений в скрипт не забывает почистить кэш, перед тем как проверить работу скрипта.
  8. OpenCart является одним из популярных движков на которых можно за короткое время развернуть полноценный интернет магазин. Современный интернет-магазин сложно представить без функции отправки почтовых сообщений. Почтовые сообщения позволяют получать различные уведомления как владельцам сайта, так и покупателям. В свою очередь побуждая их к проявлению нужной активности и не только. В данном посту мы рассмотрим пример отправки почтовых сообщений через свои скрипты. В системе OpenCart существует базовый набор самых необходимых почтовых уведомлений. Эти почтовые уведомления как правило прописаны в самих модулях. В некоторых ситуациях бывает необходимо сделать самостоятельную отправку письма. Рассмотрим простой пример, как можно отправить своё почтовое сообщение на какой-либо адрес в OpenCart 2.3. Параметры подключения к почтовому серверу Разделить процесс отправки для наглядности можно на два этапа. Первый – мы задаем основные настройки подключения к самому серверу почты. // создаём объект класса Mail $mail = new Mail(); // почтовый протокол $mail->protocol = $this->config->get('config_mail_protocol'); // доп параметр $mail->parameter = $this->config->get('config_mail_parameter'); // хост почтового сервера $mail->smtp_hostname = $this->config->get('config_mail_smtp_hostname'); // аккаунт на почте $mail->smtp_username = $this->config->get('config_mail_smtp_username'); // пароль на почте $mail->smtp_password = html_entity_decode($this->config->get('config_mail_smtp_password'), ENT_QUOTES, 'UTF-8'); // порт $mail->smtp_port = $this->config->get('config_mail_smtp_port'); // лимиты времени отправки $mail->smtp_timeout = $this->config->get('config_mail_smtp_timeout'); Настройка полей письма Практически все параметры типичны для всех почтовых серверов. Если вам приходилось до этого настраивать почту, то думаю с ними вам будет и так всё понятно. Кроме того, большинство параметров берутся из настроек самого сайта и менять в этом случае нет необходимости. Второй этап – формирования самого почтового сообщения: // Email-адрес получателя письма $mail->setTo($order_info['email']); // email-отправителя $mail->setFrom($this->config->get('config_email')); // имя отправителя $mail->setSender(html_entity_decode($order_info['store_name'], ENT_QUOTES, 'UTF-8')); // тема письма $mail->setSubject(html_entity_decode($subject, ENT_QUOTES, 'UTF-8')); // почтовый шаблон (подключается вид mail/order) $mail->setHtml($this->load->view('mail/order', $data)); // текст сообщения $mail->setText($text); // отправка $mail->send(); Как можно заметить из кода, большинство параметров достаются из самих настроек сайта, посредством метода $this->config->get(). В большинстве случаев менять параметры подключения в данном коде не нужно. Т.к. если они прописаны в настройках сайта, они так же будут использованы и в этом коде. Получается вам предстоит лишь настроить лишь поля, которые заданы на втором этапе (указать получателя, тему, и само сообщение). После того как все параметры заданы, инициализация отправки происходит посредством использования метода send(). Данный метод выполнит попытку подключения к почтовому серверу, после чего отправит само письмо. Таким образом вы можете отправлять произвольные письма из кода контроллеров и модулей. Если письма не уходят, то стоит обратить внимание на почтовые настройки самого сайта. Убедиться в том, что почта настроена верно, и другие стандартные письма отправляются исправно. Довольно часто бывает так что требуется обратиться в самому хостеру, чтобы они вам помогли с настройками почтового сервера, со своей стороны. Это делается в том случае, когда почта вся настроена, но письма все-равно не уходят по причине политики безопасности сервера.
  9. В базовом наборе в системе OpenCart есть некоторый набор статусов заказа. В зависимости от конкретного этапа выполнения заказа, он может принимать один из этих статусов. Просмотреть и настроить статусы заказов вы можете в администраторской части сайта. Просмотреть статусы заказов можно по такому пути: System > Localisation > Order Statuses Система > Локализация > Статусы заказа В моём примере используется OpenCart версии 2.3, в других версиях пути могут отличаться, поэтому это стоит так же учитывать. У самих товаров статусы так же выставляются в администраторской части сайта, при просмотре и редактировании полей заказа. Не всегда бывает удобно менять статусы заказов в ручном режиме. Часто бывает необходимость смены статуса заказа программно, по какому-либо событию. В данной заметке мы рассмотрим простой пример смены статуса заказа из контроллера. class ControllerCheckoutPayengine extends Controller { public function index() { // подключаем модель checkout/order $this->load->model('checkout/order'); // меняем статус заказа на Processing (т.е. статус с ID == 2) $this->model_checkout_order->addOrderHistory($order_id, 2); } } Название метода, и самого класса контролера в вашем случае может отличаться, всё что нужно знать для смены статуса, это ID заказа, а также ID нужного статуса. Предварительно следует подключить класс модели checkout/order, после чего посредством метода класса addOrderHistory() задать новый статус заказа. Метод addOrderHistory() в нашем примере принимает два основных параметра $order_id – номер заказа и $order_status_id – ID статуса заказа. Скрипт класса расположен по такому пути: \catalog\model\checkout\order.php Рассмотрев содержимое файла, можно заметить, что есть дополнительные параметры при обращении к методу addOrderHistory(). Полный список аргументов выглядит таким образом: addOrderHistory($order_id, $order_status_id, $comment = '', $notify = false, $override = false) Значение этих параметров: $oder_id – ID заказа; $order_status_id – ID статуса заказа; $comment – текст почтового сообщения; $notify – по умолчанию false, позволяет отправлять пользователю уведомления о смене статуса; $override – по ум. false, флаг защиты от переопределения статуса (насколько я правильно понял). Таким образом используя данный метод в контролерах и моделях можно задавать нужные статусы для заказов. Довольно часто это бывает необходимо при реализации интеграции с платёжными системами. В тот момент, когда клиент производит оплату заказа онлайн, и сервис возвращает данные об успешной транзакции. Кстати в сети была найдена интересная особенность доработки параметра $comment метода addOrderHistory(). По умолчанию данные из этой переменной принимаются и отправляются в виде plain-text. Если мы захотим отправить письмо в виде HTML текст, то соответственно письмо уйдет как листинг HTML. Однако преобразовав спец символы в HTML-сущности, мы можем реализовать отправку письма в виде HTML. Для этого достаточно в самом начале метода добавить строку: $comment = html_entity_decode($comment); После этого в самом письме мы можем наблюдать отображение письма в HTML. Этот момент не совсем относится к теме данного поста, но всё же я решил его затронуть, т.к. речь идет об использовании параметров метода addOrderHistory().
  10. При работе с CMS OpenCart владелец сайта рано или поздно сталкивается с необходимостью установки модуля на сайт. Модули позволяют дополнять и расширять функционал сайта, и возможности их довольно обширны. В данном посту мы поговорим о том, как можно установить модуль на OpenCart версии 2.x. Установить модуль в OpenCart можно двумя распространёнными способами, посредством загрузчика в администраторской части сайта, и вручную, посредством файлового менеджера. Два этих метода мы рассмотрим далее. Установка модуля OpenCart через админку Данный способ является более предпочтительным, т.к. более вероятно, что при установке вы не допустите ошибок, т.к. манипуляции с файлами происходят автоматически. Для загрузки модуля посредством администраторской части перейдите в раздел: Дополнения > Установка дополнений Обратите внимание на то, что в разных версиях перевода системы название раздела может быть другим, к примеру «Расширения» или «Модули». Далее следует выбрать файл модуля. Выберите архив с модулем, и нажмите на кнопку «загрузить». Модуль может быть собран в zip-архиве, либо идти одним xml-файлом. Модуль в zip-архиве Модуль в zip-архиве должен быть с именем название_модуля.ocmod.zip. Если вы отроете либо распакуете архив, то в нём в первую очередь вы должны заметить папку upload. Данная папка является обязательной. В этой папке находятся файлы по директориям, которые должны будут перенесены при установке на проект. Кроме того, в корне архива могут быть файлы модификаций: install.xml – файл, в котором содержаться данные для модификации ocmod; install.php – файл, который запуститься в процессе установки; install.sql – файл, для миграции базы данных, как правило может быть использован для создания таблиц, и данных в базе. Данные файлы приведены к сведению, и не являются обязательными, по этой причине некоторых из них, а может и всех в архиве может и не быть. Всё зависит от того, требуется ли выполнять какие-либо модификации через эти файлы при установке модуля или нет. После установки модуля так же следует перейти в раздел «Модификации», и в правом верхнем углу нажать на кнопку «Обновить модификации». После этого модуль можно считать установленным, естественно если в процессе ошибок не возникало. Модуль в XML-файле Модуль так же может поставляться в одном XML-файле, который может содержать данные для модификации, и иметь название имя_модуля.ocmod.xml. Устанавливается он так же через админ-часть, и после его установки следует перейти в раздел модификации и выполнить команду «Обновить модификации». Стоит заметить, что при установке модуля довольно часто может возникать ошибка с подключением к FTP. В этом случае рекомендуется установить localcopy.ocmod.xml, который должен установиться без возникновения ошибок. После этого следует выполнить обновление модификаций, и устанавливать новые модули. Модуль localcopy.ocmod.xml является модификацией, который исправляет ошибку «FTP должен быть включён в настройках», и позволяет правильно ставить модули. Скачать его вы можете в сети. Установка модулей OpenCart вручную Этот способ подходит для модулей, которые содержат лишь папку upload, и основная задача — это просто перенести файлы на сервер посредством файлового менеджера. Файловая структура в папке upload наследуется от корня сайта, поэтому при копировании с заменой все папки на сервере остаются на месте, и лишь загружаются файлы модулей. С файлами модификации если они присутствуют придётся немного разобраться, т.к. там указываются изменения, которые нужно внести в существующие файлы проекта. Если у вас нет ни малейшего навыка программирования, то лезть править исполняемые файлы проекта я не рекомендую. После копирования файлов, в администраторской части следует активировать модуль, и настроить его в случае необходимости. localcopy.ocmod.xml
  11. OpenCart как и многие другие CMS умеет кэшировать данные сайта. Механизмы кэширования позволяют оптимизировать производительность системы в целом, и ускорить процесс обработки запросов посетителей сайта. В данном посту мы поговорим про кэширование в OpenCart 2.x. В OpenCart существует целое множество различных механизмов кэширования. Про различные типы кэша мы поговорим далее. Как сбросить системный кэш в OpenCart Системный кэш в большей степени используется для хранения результатов запроса в базу данных. Разработчики могут использовать системный кэш для хранения данных, которые меняются очень редко. К примеру, данные о языке сайта, списки локаций, товаров, и др., всё зависит от того как реализует это разработчик. Данные кэша хранятся в файлах, в папке относительно корня сайта: system/cache Для сброса системного кэша достаточно очистить содержимое папки. Как сбросить кэш изображений в OpenCart Для ускорения работы сайта в OpenCart так же выполняется кэширование изображений товаров и дополнений. Иногда может возникнуть ситуация, что проект может занимать внушительные объёмы памяти на диске. Для исправления ситуации может потребоваться сбросить кэш изображений на сайте. Хранятся кэшированные изображения относительно корня сайта в папке: /image/cache Для сброса кэша изображений достаточно очистить содержимое этой папки. Как сбросить кэш vQmod vQmod – одно из самых популярных расширений OpenCart, с помощью которого можно вносить изменения в файлы проекта, не редактируя напрямую файлы ядра. Эта система перезаписи, основная идея в том, что при необходимости внесений изменений в файлы ядра, нет необходимости правки самих исходных файлов. Вместо этого создаются отдельные xml-файлы, которые содержат данные для модификации исходных файлов. Таким образом, исходные файлы остаются неизменными, а сама модификация происходит на лету, при запросе страниц сайтов. Модифицированный файл после этого размещается в отдельную папку, после этого при повторном запросе будет вызван именно файл модификации. При внесении изменений в исходные файлы, может возникнуть необходимость обновления файлов модификации, чтобы изменения вступили в силу. Решается этот вопрос отчисткой папки с файлами, где хранятся модификаторы. Делается это следующим образом, в папке /vqmod относительно корня сайта следует удалить mods.cache файл, так же после этого следует очистить содержимое каталога /cache. После очистки папки vQmod создаст новую копию файлов, уже с обновлёнными данными. Как сбросить кэш OCMod Данное решение идёт уже встроенным в систему OpenCart, начиная со 2-версии. По сути своей работы он довольно похож на тот же vQmod, однако есть свои особенности. Основное отличие его в том, что данные о модификациях OCmod хранит в базе данных. Однако кэш модификации хранится в файлах, что так же подтверждает схожесть с vQmod. Сбросить кэш OCMod можно путём отчистки содержимого папки, которая расположена относительно корня сайта: /system/modification В более поздних версиях OpenCart для удобства сброса кэша OCMod в администраторской части сайта появилась кнопка «Очистить», расположена она в разделе: Дополнения > Модификации По нажатию кнопки очистки модификации, файлы будут создаваться по новой, уже с обновлёнными данными. Модули для очистки кэша в OpenCart Как вы поняли различных механизмов кэширования достаточно в системе. Управлять всеми ими было бы удобно централизовано. Т.к. возиться с каждым модулем по отдельности как никак отнимает некоторое время. Для этих целей удобно обзавестись решением, которое позволит автоматизировать процесс очистки кэша для всех типов. Один из популярных таких модулей это ACCleaner (Auto Cache Cleaner), у которого название говорит само за себя. Данный модуль полностью автоматизирует процесс сброса файлов кэша, посредством администраторской части сайта. Работать с файлами кэша особенно часто придётся на этапе разработки сайта. Связано это с тем, что данные проекта интенсивно меняются, и необходимо постоянно выполнять процедуру сброса кэша.
  12. Банальная ситуация с необходимостью восстановления пароля администратора довольно популярна. О том, как это случается, мы говорить не будем, а рассмотрим ситуацию, когда нет возможности доступа в админ часть для смены пароля. В данном примере мы рассматриваем восстановление пароля посредством утилиты phpMyAdmin. А это значит, что у вас должен быть доступ к самой базе данных, например, посредством панели управления сайтом. Если у вас локальный сервер, то здесь уже гораздо проще. Приступим к сбросу пароля пользователя OpenCart. 1. Перейдите в phpMyAdmin; 2. Откройте базу данных сайта; 3. В списке таблиц БД необходимо найти таблицу oc_user; 4. Находим пользователя в списке, можно по полю username (логин); 5. Открываем нужную запись, нажав на ссылку «изменить»; 6. На форме редактирования в списке выбора функции выбираем «MD5», и вводим сам пароль; 7. Сохраняем запись, пробуем авторизоваться в админке. Подобным образом можно сменить пароль для любого пользователя в OpenCart.
  13. После установки SSL-ключа на сайте, возникает необходимость перенаправления URL-адреса с http на https. Как правило, на самом хостинге довольно часто встречается функционал, который позволяет выполнить редирект за защищённый протокол. Однако в случае с OpenCart, в настройках так же придётся выполнить кое-какие манипуляции. Далее мы поговорим о переводе сайта OpenCart 2.x на работу по https протоколу. Первый шаг — это правка конфигурационных файлов сайта. Файл /config.php присутствует в OpenCart в двух папках. Первый в корне сайта, второй в папке /admin. Таким образом, править будет необходимо два файла: /config.php /admin/config.php В том, что находится в корне сайта, исправляем значение константы HTTPS_SERVER. Указываем протокол https вместо http: // HTTPS define('HTTPS_SERVER', 'https://yoursite.loc/'); Подобно этому, вносим правки в конфигурационный файл /admin/config.php: // HTTPS define('HTTPS_SERVER', 'https://yoursite.loc/admin/'); define('HTTPS_CATALOG', 'https://yoursite.loc/'); Сохраняем изменения в файлах. После этого, в администраторской части сайта так же следует включить использование SSL. Для этого переходим в раздел настроек сервера: Система > Настройки > Сервер В зависимости от того как переведена ваша версия OpenCart названия кнопок могут быть немного другими. В этом моменте вам придётся интуитивно перейти в указанный раздел. Далее находим параметры безопасности, и активируем использование SSL: После того как вы изменили настройки, в правом верхнем углу находится кнопка для сохранения изменений. После этих операций, ваш OpenCart считается настроенным для работы по https протоколу. Если у нас нет возможности сделать перенаправление с http на https в панели управления хостингом, то реализовать это можно так же посредством файла .htaccess. Для того чтобы сайт всегда открывался через https прописываем в файле .htaccess следующую запись: RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] Затем, при обращении на URL-адрес сайта с использованием протокола http, сервер будет перенаправлять тот же адрес, изменив при этом протокол с http на https. На этом моменте и остановимся, это то, что и требовалось получить.
  14. Множество популярных фреймворков используют шаблон проектирования MVC, и OpenCart не стал исключением. Концепция MVC широко используется в современном веб-программировании, и популярность её в первую очередь в том, что этот шаблон проектирования прост для понимания, и решает довольно распространённые проблемы с разработкой архитектуры проекта. Для тех, кто не знает, MVC представляет из себя архитектуру вида Модель—Представление—Контроллёр. В модели содержатся все основные данные приложения, касательно запросов к базе данных, основной логики, и методов работы. Контролёры в свою очередь являются промежуточным звеном между моделью и представлением, и осуществляют выполнение программы обращаясь к модели и передавая результат в представление. Представление в свою очередь является шаблоном разметки страницы, куда поступают уже готовые данные для вывода на странице. В OpenCart мы можем обращаться к различным моделям, предварительно подгрузив их в контроллере. Загрузка модели в контроллере Существует правило обращения к моделям. Все модели публичной части сайта на OpenCart располагаются в папке /catalog/model. $this->load->model('catalog/information'); Так к примеру, загружая модель, мы подключаем файл information.php из директории /catalog/model/catalog. Модель представляет из себя класс PHP, который именуется особым образом, и может содержать некий набор методов. Мы можем обращаться к этим методам из контролёра, таким образом: $prodList = $this->model_catalog_information->getProdList(); Таким образом, в переменную $prodList попадает массив данных, с которым мы может работать в пределах скрипта контролёра. Передача данных в представление Передать данные представлению мы можем посредством $this->data, предварительно задав название ключа для объекта. $this->data['production'] = $this->model_catalog_information->getProdList(); В представлении эти данные будут доступны в переменной $production. Представление как правило уже содержит разметку HTML, где остаётся сделать вывод данных из переменной. Стоит обратить внимание на то, что посредством объекта $this->data передаются все переменные в файл представления. На практике количество переменных в представлении может быть целое множество.
  15. Практический каждый более или менее наполненный товарами интернет-магазин использует некоторые критерии сортировки товаров на сайте. В одном интернет магазине это может быть показ по дате добавления, в другом же это сортировка по популярности того или иного продукта. Сортировка товаров в интернет магазине позволяет выставлять элементы в нужном порядке. Это позволяет существенно оптимизировать реализацию товаров на витрине и конечно же вопрос релевантности никто ещё не отменял. Понятие релевантности в сети интернет сегодня уже используется довольно широко, начиная от поисковых систем, заканчивая сайтом с новостной лентой. И это хорошо работает, когда популярные записи всегда стремятся в топ, а менее просматриваемые уходят в низ по списку. Однако в одних случаях это работает в автоматическом режиме, в других выставляется вручную. В обеих случаях есть свои преимущества и недостатки. В данной заметке мы поговорим про сортировку товаров в OpenCart. Поле «Порядок сортировки» в OpenCart В движке OpenCart как и во многих других движках существует поле, обозначаемое как «Порядок сортировки» товара. При редактировании карточки товара, мы можем видеть такое поле Как уже ясно из самого названия, оно используется для выставления значения позиции в каталоге для конкретного товара. Таким образом, в каталоге товары могут быть выстроены в нужном порядке вручную. При сортировке товаров по этому полю, выборка элементов происходит посредством указанной в запросе ORDER BY sort_order. Запрос в базу как правило производится из самого модуля. Сортировку товаров в OpenCart по умолчанию мы можем выставлять различным образом, и далее речь пойдёт об этом. Как поменять сортировку товаров в OpenCart по умолчанию Существуют множество полей, по которым мы может выполнять сортировку товаров в каталоге. Некоторые системы позволяют настраивать подобные вещи непосредственно в администраторской части сайта. В OpenCart это делается программно, т.к. всё же нет постоянной необходимости менять поле, по которому будут сортироваться товары в каталоге. Как уже говорилось выше, запрос в базу данных выполняется из самого модуля. Однако порядок выборки товаров мы может задавать через контроллер. По этой причине нет необходимости лезть в код модуля, куда целесообразнее это сделать через контроллер. Контроллер, который участвует в выводе товаров категории в OpenCart располагается по такому пути: /catalog/controller/product/category.php Открыв данный файл, следует найти запись такого вида: if (isset($this->request->get['sort'])) { $sort = $this->request->get['sort']; } else { $sort = 'p.sort_order'; } В общем запись которая находится в условии else обозначает значение по умолчанию. Таким образом, переменная $sort определяет имя поля по умолчанию, которое будет использовано для сортировки товаров. Поменяв имя поля на другое, мы можем изменить поле, по которому будет сортироваться товары в категории. Существуют некоторое множество полей, по которому мы можем сортировать товары в каталоге. Далее поговорим об этих полях. Поля доступные для сортировки в OpenCart Есть несколько ключевых полей в базе данных, по которым целесообразно выполнять сортировку товаров: ‘pd.name’, — Наименование товара; ‘p.model’, — Поле, обозначающеии модель товара; ‘p.quantity‘, — Поле, обозначающее остаток товара на сайте; ‘p.price’, — Поле с ценой товара; ‘rating’, — Поле с рейтингом товара; ‘p.sort_order’, — Отдельное поле для ручной сортировки; ‘p.date_added’ — Поле с датой добавления товара; Для примера, если мы хотим поменять сортировку товаров в каталоге по дате добавления, нам следует в переменной $sort выставить значение p.date_added. Кроме того, существуют так же возможность указания направления сортировки (ASC или DESC). Для этого используется переменная $order, которая может содержать два значения: ASC – сортировка по возрастанию; DESC – порядок сортировки по убыванию. В большинстве случаем, изменения этих двух параметров бывает достаточно. После внесения изменений в скрипт не забывает почистить кэш, перед тем как проверить работу скрипта.
  16. исправлено Добавлено для наглядности реализовано (если блок текста более 100px -скрывается под спойлер - появляется кнопки читать еще/скрыть) p.s. Архив обновлен согласно предложенным доработкам
  17. Данное дополнение - пилотное. Делалось под определенную задачу: Визуализация и описание основных узлов и деталей продаваемого устройства . Предполагаю что может использоваться по типу "аля- лукбук" (для ИМ одежды), изображений сертификатов и лицензий конкретного товара (к примеру мед. оборудования) и пр. При интересе и предложениях будет дорабатываться. После приобретения дополнения все обновления будут доступны к скачиванию без ограничений по стоимости и времени.
  18. Просмотр файла Дополнительная информация о товаре/ AddiinfoProduct Дополнение выполняет задачу вывода дополнительной информации + изображение в карточке товара. Неограниченное количество строк. Неограниченное количество знаков текста. В версии 1.0 выводится в карточке товара над "табами". Язык- русский. Установка - менеджер дополнений- ocmod Версия Опенкарт - 2.3 Демо фронт Админка- demo/demo Делалось под определенную задачу: Визуализация и описание основных узлов и деталей продаваемого устройства . Предполагаю что может использоваться по типу "аля- лукбук" (для ИМ одежды), изображений сертификатов и лицензий конкретного товара (к примеру мед. оборудования) и пр. Добавил Pascha Добавлено 21.07.2022 Категория Меню, дизайн, внешний вид  
  19. Дополнение выполняет задачу вывода дополнительной информации + изображение в карточке товара. Неограниченное количество строк. Неограниченное количество знаков текста. В версии 1.0 выводится в карточке товара над "табами". Язык- русский. Установка - менеджер дополнений- ocmod Версия Опенкарт - 2.3 Демо фронт Админка- demo/demo Делалось под определенную задачу: Визуализация и описание основных узлов и деталей продаваемого устройства . Предполагаю что может использоваться по типу "аля- лукбук" (для ИМ одежды), изображений сертификатов и лицензий конкретного товара (к примеру мед. оборудования) и пр.
    1 300 руб.
  20. При установке модулей из маркетплейса прямо с веб-сайта вы можете столкнуться с сообщением об ошибке типа «Signature hash does not match!», решение этой проблемы для OpenCart версии 3.0.2.0 следующее: Войдите в свою учетную запись OpenCart https://www.opencart.com/index.php?route=account/login На панели инструментов вы увидите «Ваши магазины», щелкните по нему, затем нажмите кнопку «Добавить магазин». затем добавьте информацию о своем магазине, которая является доменным именем. Затем нажмите «Отправить», вы получите подробную информацию о вашем имени пользователя и секретном ключе. зайдите на свой сайт и войдите в админку. Перейдите в Расширения >> Торговая площадка и нажмите кнопку настройки. Появится всплывающее окно, в котором вы вводите имя пользователя и секретный ключ, введите их, которые вы получили выше, на панели управления учетной записью opencart.com. Или просто устанавливайте модули стандартным способом (через установку ocmod или по FTP) ))))
  21. как по мне, так немного костыль и плюсом не совсем понятно какую цель преследует данное решение, но вывод в product.tpl (раскидываем по блокам в зависимости от ID опции) 2 блока <div id="block1"></div> и <div id="block2"></div> <?php if ($option['type'] == 'checkbox') { ?> <?php if ($option['option_id'] == '13' || $option['option_id'] == '15') { ?> <div id="block1"> <div class="form-group<?php echo ($option['required'] ? ' required' : ''); ?>"> <label class="control-label"><?php echo $option['name']; ?></label> <div id="input-option<?php echo $option['product_option_id']; ?>"> <?php foreach ($option['product_option_value'] as $option_value) { ?> <div class="checkbox"> <label> <input type="checkbox" name="option[<?php echo $option['product_option_id']; ?>][]" value="<?php echo $option_value['product_option_value_id']; ?>" /> <?php if ($option_value['image']) { ?> <img src="<?php echo $option_value['image']; ?>" alt="<?php echo $option_value['name'] . ($option_value['price'] ? ' ' . $option_value['price_prefix'] . $option_value['price'] : ''); ?>" class="img-thumbnail" /> <?php } ?> <?php echo $option_value['name']; ?> <?php if ($option_value['price']) { ?> (<?php echo $option_value['price_prefix']; ?><?php echo $option_value['price']; ?>) <?php } ?> </label> </div> <?php } ?> </div> </div> </div> <?php } ?> <?php } ?> <?php if ($option['type'] == 'checkbox') { ?> <?php if ($option['option_id'] == '14') { ?> <div id="block2"> <div class="form-group<?php echo ($option['required'] ? ' required' : ''); ?>"> <label class="control-label"><?php echo $option['name']; ?></label> <div id="input-option<?php echo $option['product_option_id']; ?>"> <?php foreach ($option['product_option_value'] as $option_value) { ?> <div class="checkbox"> <label> <input type="checkbox" name="option[<?php echo $option['product_option_id']; ?>][]" value="<?php echo $option_value['product_option_value_id']; ?>" /> <?php if ($option_value['image']) { ?> <img src="<?php echo $option_value['image']; ?>" alt="<?php echo $option_value['name'] . ($option_value['price'] ? ' ' . $option_value['price_prefix'] . $option_value['price'] : ''); ?>" class="img-thumbnail" /> <?php } ?> <?php echo $option_value['name']; ?> <?php if ($option_value['price']) { ?> (<?php echo $option_value['price_prefix']; ?><?php echo $option_value['price']; ?>) <?php } ?> </label> </div> <?php } ?> </div> </div> </div> <?php } ?> <?php } ?> опции с указанным ID разделены и отображаются в разных блоках теперь переместим куда хотим к примеру опции в <div id="block2">....</div> где требуется вставим блок с уникальным классом...примерно так <div id="product"> <div id="block2_clone"></div> </div> </div> использую и <div id="product">, так как только в таком случае опции будут работать и учитываться при покупке ну и собственно скрипт для перемещения ( пишем над <?php echo $footer; ?> ) <script> $('#block2').appendTo( $('#block2_clone') ); </script> Результат достигнут.
  22. Ну и для тех, кому в принципе нужно разбиение какого то длинного текста на колонки, можете применить column-count почитать можно тут
  23. Недавно, согласно предоставленному макету нужно было разбить статьи в 2 разные колонки. ( предварительно убрав то что не нужно) Сайт был для предоставления услуг, то есть пункты подобные "Возврат товара" и прочие были упразднены и потому футер предполагалось переверстать и пересортировать пункты. Итак, не став сильно заморачиваться и принял решение использовать для этих целей сортировку статей. Для этого в catalog/view/theme/default/template/information/information.tpl Формируем первую колонку <?php if ($informations ) { ?> <div class="col-sm-4"> <h5>Название первой колонки с статьями</h5> <ul class="list-unstyled"> <?php foreach ($informations as $information) { ?> <?php if ($information['sort_order'] < 100 ) { ?> <li><a href="<?php echo $information['href']; ?>"><?php echo $information['title']; ?></a></li> <?php } ?> <?php } ?> </ul> </div> <?php } ?> Пояснение: В данную колонку будут помещаться все статьи которым определено "отображать в футере" и номером сортировки менее 100 Формируем вторую колонку <?php if ($informations) { ?> <div class="col-sm-4"> <h5>Название второй колонки с статьями</h5> <ul class="list-unstyled"> <li><a href="/">Главная</a></li> <?php foreach ($informations as $information) { ?> <?php if ($information['sort_order'] > 100 ) { ?> <li><a href="<?php echo $information['href']; ?>"><?php echo $information['title']; ?></a></li> <?php } ?> <?php } ?> <li><a href="<?php echo $sitemap; ?>"><?php echo $text_sitemap; ?></a></li> </ul> </div> <?php } ?> Пояснение: В данную колонку будут помещаться все статьи которым определено "отображать в футере" и номером сортировки более 100 Вот такое простенькое и возможно слегка костыльное решение для сайтов, где предполагается много статей, которые необходимо разместить в подвале сайта.
  24. Иногда "слетают" стили на собственно сайте или затруднен вход в админку сайта (при отсутствии корректного отображения страницы входа) Костыль- но работает Прежде всего убедитесь, что вы подключили SSL сертификат на вашем серерве\хостинге, более подробно об этом вы можете узнать у своего хостинг-провайдера в службе поддержки. 1. Для начала, откройте панель управления вашим магазином и перейдите в раздел Система > Настройки > Редактировать Затем откройте вкладку "Сервер" и выберите Использовать SSL: (да) 2. Откройте файл config.php (который расположен в корневой директории вашего сайта) с помощью текстового редактора. Найдите строку: // HTTP define('HTTP_SERVER', 'http://site.ru/'); // HTTPS define('HTTPS_SERVER', 'http://site.ru/'); Замените эти строки как указано ниже: // HTTP define('HTTP_SERVER', 'https://site.ru/'); // HTTPS define('HTTPS_SERVER', 'https://site.ru/'); 3. Откройте файл admin/config.php и найдите строки: // HTTP define('HTTP_SERVER', 'http://site.ru/admin/'); define('HTTP_CATALOG', 'http://site.ru/'); // HTTPS define('HTTPS_SERVER', 'http://site.ru/admin/'); define('HTTPS_CATALOG', 'http://site.ru/'); Замените как указано ниже: // HTTP define('HTTP_SERVER', 'https://site.ru/admin/'); define('HTTP_CATALOG', 'https://site.ru/'); // HTTPS define('HTTPS_SERVER', 'https://site.ru/admin/'); define('HTTPS_CATALOG', 'https://site.ru/'); Сохраните файлы, этим самым мы обозначим доступность сайта по защищенному протоколу. p.s. 1. При данной правке учитывайте, что по окончанию действия сертификата Ваш сайт будет "криво" отображаться и нужно будет сделать "обратные" правки 2. Как правило после любых действий стоит очистить кеш изображений 3. Случается что картинки вставленные через текстовой редактор (описания, статьи и пр.) не отображаются - потребуется заново отредактировать вновь указав путь до картинки в менеджере изображений (или в режиме кода исправить путь до картинки с http на https)
×
×
  • Создать...