https://wiki.umisoft.ru/api.php?action=feedcontributions&user=Alelekov&feedformat=atomUmicms - Вклад участника [ru]2024-03-29T00:36:29ZВклад участникаMediaWiki 1.31.0https://wiki.umisoft.ru/index.php?title=%D0%98%D0%B5%D1%80%D0%B0%D1%80%D1%85%D0%B8%D1%8F_%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%D0%B0_Demomarket&diff=9288Иерархия шаблона Demomarket2019-06-28T14:16:31Z<p>Alelekov: /* Комментарии */</p>
<hr />
<div>'''Актуально для версии 20'''<br />
<br />
== Цель ==<br />
Описать иерархию шаблона Demomarket, т.к. довольно часто имеется необходимость отредактировать те или иные данные, что бывает сложно для пользователя, не знакомого с иерархической структурой шаблона.<br />
<br />
== Описание ==<br />
Все файлы шаблона, ответственные за визуальное отображение тех или иных элементов, находятся в папке templates/demomarket/php.<br />
<br />
=== Базовый функционал шаблона ===<br />
==== Точка входа в шаблон ====<br />
"Построение" скелета сайта начинается с файла common.phtml, в нём происходит инициализация общих переменных (глобальный массив $variables) и этот файл является точкой входа в шаблон.<br />
==== Скелет сайта ====<br />
Скелет сайта - head, body, header и footer строится в файле templates/demomarket/php/layout/index.phtml. Здесь осуществляется вызов отрисовки перечисленных нами блоков.<br />
===== Содержимое тега <head> =====<br />
Содержимое тега <head> располагается в файле /templates/demomarket/php/layout/head.phtml. Здесь происходит проставление мета-тегов, подключение различных скриптов и стилей.<br />
=====Содержимое тега <header>=====<br />
Содержимое тега <header> располагается в файле /templates/demomarket/php/layout/header/index.phtml. Здесь происходит вызов отображения:<br />
<ul><br />
<li>Всех всплывающих окон на сайте(layout/modal/index.phtml)</li><br />
<li>Шапка сайта в мобильной версии(layout/header/mobile.phtml)</li> <br />
<li>Меню в мобильной версии(layout/header/mobile_menu.phtml)</li> <br />
<li>Верхний ряд шапки сайта - меню основных страниц(layout/header/top/index.phtml)</li> <br />
<li>Средний ряд шапки сайта - блок с логотипом, форма "Заказать звонок", режим работы, корзина товаров. (layout/header/middle/index.phtml)</li><br />
<li>Нижний ряд в шапке сайта - меню каталога товаров, форма поиска, блок с кнопкой сравнения товаров и входа на сайт/панель управления пользователя. (layout/header/bottom/index.phtml)</li><br />
</ul><br />
<br />
=====Основной контент страницы=====<br />
Вывод основного контента страницы располагается в файле /templates/demomarket/php/layout/main.phtml. Здесь происходит назначение шаблона для вывода ошибок, настройка роутинга для работы по принципу модуль/метод.<br />
===== Содержимое тега <footer> =====<br />
Вывод содержимого тега <footer> располагается в файле /templates/demomarket/php/layout/footer/index.phtml. Здесь происходит вывод визуального оформления подвала сайта для десктопной и мобильной версий шаблона.<br />
<br />
===Обработка методов системы===<br />
Благодаря роутингу модуль/метод, который мы настроили в основном контенте страницы, вывод каждого результата нашего запроса будет обеспечен соответствующим файлом. Например, если мы переходим в модуль Каталог(/catalog/) - автоматически вызывается метод category. В таком случае для того, чтобы у нас что-то вывелось на сайте, нужна папка catalog, в которой будет существовать соответствующий файл для вывода результатов работы метода - category.phtml.<br />
====Онлайн-запись(Услуги)====<br />
Вывод данных для функционала онлайн записи находится в папке appointment. Здесь имеется единственный файл page.phtml, в котором и реализован весь вывод.<br />
====Блоги====<br />
Вывод данных для функционала блогов находится в папке blogs20. <br />
Здесь располагаются<br />
<ul><br />
<li>Страница блога - blog.phtml</li><br />
<li>Комментарй к посту блога - comment.phtml </li><br />
<li>Пост блога - post.phtml</li><br />
<li>В папках post и comments находятся дополнительные файлы для вывода результатов обработки функционала комментариев и постов блога.</li><br />
</ul><br />
====Каталог====<br />
Вывод данных для функционала каталога находится в папке catalog. <br />
<ul><br />
<li>Категория каталога - category.phtml. </li><br />
<li>Страница товара - object.phtml.</li><br />
<li>Для вывода превью товара используются шаблоны в папке /product/preview</li><br />
<li>Для вывода полной карточки товара используются шаблона в папке /product/main</li><br />
</ul><br />
<br />
====Комментарии====<br />
Вывод данных для функционала комментариев находится в папке comments. <br />
<ul><br />
<li>Cтраница комментария - comment.phtml </li><br />
<li>Спискок комментариев с пагинацией - insert.phtml.</li><br />
<li>В папке comments/comment находятся файлы для отображения формы добавления нового комментария(new.phtml) и для превью комментария(preview.phtml)</li><br />
</ul><br />
<br />
====Контент====<br />
Вывод данных для функционала комментариев находится в папке content. <br />
<ul><br />
<li>Вывод страницы контента - content.phtml. Вывод страницы по умолчанию обрабатывается по отдельному шаблону content/home/index</li><br />
<li>Вывод страницы 404 - notfound.phtml</li><br />
<li>Карта сайта - sitemap.phtml</li><br />
<li>В папке sitemap находятся вспомогательные файлы для вывода карты сайта.</li><br />
<li>В папке home находятся все необходимые шаблоны отображения для контента главной страницы сайта. Более подробную информацию о том, за что отвечает каждый файл, вы можете получить в комментарии, который расположен в начале каждого файла.</li><br />
</ul><br />
====Формы====<br />
В папке data находятся файлы для отображения форм на сайте.<br />
<ul><br />
<li>Отрисовка каждой группы формы и каждое поле группы в зависимости от типа данных - form.phtml.</li><br />
<li>В папке form_field находятся файлы для отображения того или иного типа поля формы.</li><br />
</ul><br />
====Рассылки====<br />
Вывод данных для функционала рассылок находится в папке dispatches. <br />
<ul><br />
<li>Страница подписки на рассылку - subscribe.phtml</li><br />
<li>Страница результата подписки на рассылку - subscribe_do.phtml</li><br />
<li>Страница отписки от рассылки - subscribe.phtml</li><br />
</ul><br />
====Интернет-магазин====<br />
Весь функционал, связанный с интернет-магазином, описан в папке emarket.<br />
<ul><br />
<li>Корзина товаров - cart.phtml. Все элементы, связанные с корзиной товаров, выводятся по отдельным шаблонам, расположенным в папке cart.</li><br />
<li>Страница сравнения товаров - compare.phtml. Все элементы, связанные со сравнением товаров, выводятся по отдельным шаблонам, расположенным в папке compare.</li><br />
<li>Старая цена товара - old_price.phtml.</li><br />
<li>Вывод списка заказов пользователя - ordersList.phtml.</li><br />
<li>Страница личного кабинета покупателя - personal.phtml.</li><br />
<li>Оформление заказа по шагам - purchase.phtml.</li><br />
<li>Оформление заказа в один шаг - purchasing_one_step.phtml.</li><br />
<li>Прогресс-бар с шагами оформления заказа - steps.phtml.</li><br />
</ul><br />
<br />
====FAQ====<br />
В папке faq содержится функционал "Вопрос-ответ" на сайте.<br />
<ul><br />
<li>Страница категории в модуле FAQ - category.phtml</li><br />
<li>Страница успешно заданного вопроса = post_question.phtml</li><br />
<li>Страница проекта в модуле FAQ - project.phtml</li><br />
<li>Страница вопроса - question.phtml</li><br />
<li>В папках question и category находятся вспомогательные файлы для вывода категорий вопросов и вопросов</li><br />
</ul><br />
====Файловый менеджер====<br />
В папке filemanager находится функционал для работы с файлами на сайте. Здесь имеется единственный шаблон для страницы скачиваемого файла - shared_file.phtml.<br />
====Форум====<br />
В папке forum располагается функционал форума на сайте.<br />
<ul><br />
<li>Конференция форума - conf.phtml</li><br />
<li>Страница сообщения в топике форума - message.phtml</li><br />
<li>Топик форума - topic.phtml</li><br />
<li>В папках message и topic содержатся вспомогательные файлы для вывода сообщений и тем форума.</li><br />
</ul><br />
====Новости====<br />
Весь функционал отображения новостей на сайте находится в папке news.<br />
<ul><br />
<li>Страница новости - item.phtml</li><br />
<li>Лента новостей - rubric.phtml</li><br />
<li>Превью новости в ленте - rubric_item.phtml</li><br />
<li>В папке item находятся вспомогательные файлы для вывода элементов новости.</li><br />
</ul><br />
====Фотоальбом/Фотогалерея====<br />
Функционал фотогалереи на сайте находится в папке photoalbum.<br />
Здесь имеются только два файла:<br />
<ul><br />
<li>Альбом с фотографиями - album.phtml</li><br />
<li>Страница фотографии - photo.phtml</li><br />
</ul><br />
====Поиск====<br />
Функционал вывода данных поиска по сайту расположен в папке search.<br />
<ul><br />
<li>Результаты поиска - result.phtml</li><br />
<li>Страница с результатами поиска - search_do.phtml</li><br />
</ul><br />
====Пользователи====<br />
Функционал вывода данных для пользователя на сайте находится в папке users.<br />
<ul><br />
<li>Подробную информацию о том, за что отвечает каждый файл в этой папке, вы можете получить из комментариев в начале каждого файла.</li><br />
<li>В папке login_do находятся шаблоны для вывода результата попытки входа на сайт</li><br />
</ul><br />
====Опросы====<br />
Вывод опросов на сайте описан в папке vote. Здесь находится<br />
<ul><br />
<li>Вывод блока отзывов о товаре - element_rating.phtml</li><br />
<li>Формы опроса - form.phtml</li><br />
<li>Вывода опроса/его результатов - poll.phtml</li><br />
<li>Результаты опроса - result.phtml</li><br />
<li>Шаблон обработки результата макроса установки рейтинга - setElementRating.phtml</li><br />
<li>Вывод опроса или его результата - show_vote.phtml</li><br />
</ul><br />
====Обратная связь====<br />
Функционал форм обратной связи описан в папке webforms.<br />
<ul><br />
<li>Форма всплывающего окна "Заказать звонок" - callback.phtml</li><br />
<li>Страница формы обратной связи - page.phtml</li><br />
<li>Страница с сообщением об успешно отправленной форме - posted.phtml</li><br />
<li>В папке page находятся вспомогательные файлы для вывода данных форм.</li><br />
</ul><br />
<br />
===Языковые константы ===<br />
Используемые в решении языковые константы расположены в папке i18n<br />
[[category:Вопросы и уроки разработки сайтов на UMI.CMS]]</div>Alelekovhttps://wiki.umisoft.ru/index.php?title=%D0%98%D0%B5%D1%80%D0%B0%D1%80%D1%85%D0%B8%D1%8F_%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%D0%B0_Demomarket&diff=9287Иерархия шаблона Demomarket2019-06-28T14:15:16Z<p>Alelekov: /* Каталог */</p>
<hr />
<div>'''Актуально для версии 20'''<br />
<br />
== Цель ==<br />
Описать иерархию шаблона Demomarket, т.к. довольно часто имеется необходимость отредактировать те или иные данные, что бывает сложно для пользователя, не знакомого с иерархической структурой шаблона.<br />
<br />
== Описание ==<br />
Все файлы шаблона, ответственные за визуальное отображение тех или иных элементов, находятся в папке templates/demomarket/php.<br />
<br />
=== Базовый функционал шаблона ===<br />
==== Точка входа в шаблон ====<br />
"Построение" скелета сайта начинается с файла common.phtml, в нём происходит инициализация общих переменных (глобальный массив $variables) и этот файл является точкой входа в шаблон.<br />
==== Скелет сайта ====<br />
Скелет сайта - head, body, header и footer строится в файле templates/demomarket/php/layout/index.phtml. Здесь осуществляется вызов отрисовки перечисленных нами блоков.<br />
===== Содержимое тега <head> =====<br />
Содержимое тега <head> располагается в файле /templates/demomarket/php/layout/head.phtml. Здесь происходит проставление мета-тегов, подключение различных скриптов и стилей.<br />
=====Содержимое тега <header>=====<br />
Содержимое тега <header> располагается в файле /templates/demomarket/php/layout/header/index.phtml. Здесь происходит вызов отображения:<br />
<ul><br />
<li>Всех всплывающих окон на сайте(layout/modal/index.phtml)</li><br />
<li>Шапка сайта в мобильной версии(layout/header/mobile.phtml)</li> <br />
<li>Меню в мобильной версии(layout/header/mobile_menu.phtml)</li> <br />
<li>Верхний ряд шапки сайта - меню основных страниц(layout/header/top/index.phtml)</li> <br />
<li>Средний ряд шапки сайта - блок с логотипом, форма "Заказать звонок", режим работы, корзина товаров. (layout/header/middle/index.phtml)</li><br />
<li>Нижний ряд в шапке сайта - меню каталога товаров, форма поиска, блок с кнопкой сравнения товаров и входа на сайт/панель управления пользователя. (layout/header/bottom/index.phtml)</li><br />
</ul><br />
<br />
=====Основной контент страницы=====<br />
Вывод основного контента страницы располагается в файле /templates/demomarket/php/layout/main.phtml. Здесь происходит назначение шаблона для вывода ошибок, настройка роутинга для работы по принципу модуль/метод.<br />
===== Содержимое тега <footer> =====<br />
Вывод содержимого тега <footer> располагается в файле /templates/demomarket/php/layout/footer/index.phtml. Здесь происходит вывод визуального оформления подвала сайта для десктопной и мобильной версий шаблона.<br />
<br />
===Обработка методов системы===<br />
Благодаря роутингу модуль/метод, который мы настроили в основном контенте страницы, вывод каждого результата нашего запроса будет обеспечен соответствующим файлом. Например, если мы переходим в модуль Каталог(/catalog/) - автоматически вызывается метод category. В таком случае для того, чтобы у нас что-то вывелось на сайте, нужна папка catalog, в которой будет существовать соответствующий файл для вывода результатов работы метода - category.phtml.<br />
====Онлайн-запись(Услуги)====<br />
Вывод данных для функционала онлайн записи находится в папке appointment. Здесь имеется единственный файл page.phtml, в котором и реализован весь вывод.<br />
====Блоги====<br />
Вывод данных для функционала блогов находится в папке blogs20. <br />
Здесь располагаются<br />
<ul><br />
<li>Страница блога - blog.phtml</li><br />
<li>Комментарй к посту блога - comment.phtml </li><br />
<li>Пост блога - post.phtml</li><br />
<li>В папках post и comments находятся дополнительные файлы для вывода результатов обработки функционала комментариев и постов блога.</li><br />
</ul><br />
====Каталог====<br />
Вывод данных для функционала каталога находится в папке catalog. <br />
<ul><br />
<li>Категория каталога - category.phtml. </li><br />
<li>Страница товара - object.phtml.</li><br />
<li>Для вывода превью товара используются шаблоны в папке /product/preview</li><br />
<li>Для вывода полной карточки товара используются шаблона в папке /product/main</li><br />
</ul><br />
<br />
====Комментарии====<br />
Вывод данных для функционала комментариев находится в папке comments. <br />
<ul><br />
<li>Для вывода страницы комментария используется файл comment.phtml </li><br />
<li>Для вывода списка комментариев с пагинацией используется файл insert.phtml.</li><br />
<li>В папке comments/comment находятся файлы для отображения формы добавления нового комментария(new.phtml) и для превью комментария(preview.phtml)</li><br />
</ul><br />
====Контент====<br />
Вывод данных для функционала комментариев находится в папке content. <br />
<ul><br />
<li>Вывод страницы контента - content.phtml. Вывод страницы по умолчанию обрабатывается по отдельному шаблону content/home/index</li><br />
<li>Вывод страницы 404 - notfound.phtml</li><br />
<li>Карта сайта - sitemap.phtml</li><br />
<li>В папке sitemap находятся вспомогательные файлы для вывода карты сайта.</li><br />
<li>В папке home находятся все необходимые шаблоны отображения для контента главной страницы сайта. Более подробную информацию о том, за что отвечает каждый файл, вы можете получить в комментарии, который расположен в начале каждого файла.</li><br />
</ul><br />
====Формы====<br />
В папке data находятся файлы для отображения форм на сайте.<br />
<ul><br />
<li>Отрисовка каждой группы формы и каждое поле группы в зависимости от типа данных - form.phtml.</li><br />
<li>В папке form_field находятся файлы для отображения того или иного типа поля формы.</li><br />
</ul><br />
====Рассылки====<br />
Вывод данных для функционала рассылок находится в папке dispatches. <br />
<ul><br />
<li>Страница подписки на рассылку - subscribe.phtml</li><br />
<li>Страница результата подписки на рассылку - subscribe_do.phtml</li><br />
<li>Страница отписки от рассылки - subscribe.phtml</li><br />
</ul><br />
====Интернет-магазин====<br />
Весь функционал, связанный с интернет-магазином, описан в папке emarket.<br />
<ul><br />
<li>Корзина товаров - cart.phtml. Все элементы, связанные с корзиной товаров, выводятся по отдельным шаблонам, расположенным в папке cart.</li><br />
<li>Страница сравнения товаров - compare.phtml. Все элементы, связанные со сравнением товаров, выводятся по отдельным шаблонам, расположенным в папке compare.</li><br />
<li>Старая цена товара - old_price.phtml.</li><br />
<li>Вывод списка заказов пользователя - ordersList.phtml.</li><br />
<li>Страница личного кабинета покупателя - personal.phtml.</li><br />
<li>Оформление заказа по шагам - purchase.phtml.</li><br />
<li>Оформление заказа в один шаг - purchasing_one_step.phtml.</li><br />
<li>Прогресс-бар с шагами оформления заказа - steps.phtml.</li><br />
</ul><br />
<br />
====FAQ====<br />
В папке faq содержится функционал "Вопрос-ответ" на сайте.<br />
<ul><br />
<li>Страница категории в модуле FAQ - category.phtml</li><br />
<li>Страница успешно заданного вопроса = post_question.phtml</li><br />
<li>Страница проекта в модуле FAQ - project.phtml</li><br />
<li>Страница вопроса - question.phtml</li><br />
<li>В папках question и category находятся вспомогательные файлы для вывода категорий вопросов и вопросов</li><br />
</ul><br />
====Файловый менеджер====<br />
В папке filemanager находится функционал для работы с файлами на сайте. Здесь имеется единственный шаблон для страницы скачиваемого файла - shared_file.phtml.<br />
====Форум====<br />
В папке forum располагается функционал форума на сайте.<br />
<ul><br />
<li>Конференция форума - conf.phtml</li><br />
<li>Страница сообщения в топике форума - message.phtml</li><br />
<li>Топик форума - topic.phtml</li><br />
<li>В папках message и topic содержатся вспомогательные файлы для вывода сообщений и тем форума.</li><br />
</ul><br />
====Новости====<br />
Весь функционал отображения новостей на сайте находится в папке news.<br />
<ul><br />
<li>Страница новости - item.phtml</li><br />
<li>Лента новостей - rubric.phtml</li><br />
<li>Превью новости в ленте - rubric_item.phtml</li><br />
<li>В папке item находятся вспомогательные файлы для вывода элементов новости.</li><br />
</ul><br />
====Фотоальбом/Фотогалерея====<br />
Функционал фотогалереи на сайте находится в папке photoalbum.<br />
Здесь имеются только два файла:<br />
<ul><br />
<li>Альбом с фотографиями - album.phtml</li><br />
<li>Страница фотографии - photo.phtml</li><br />
</ul><br />
====Поиск====<br />
Функционал вывода данных поиска по сайту расположен в папке search.<br />
<ul><br />
<li>Результаты поиска - result.phtml</li><br />
<li>Страница с результатами поиска - search_do.phtml</li><br />
</ul><br />
====Пользователи====<br />
Функционал вывода данных для пользователя на сайте находится в папке users.<br />
<ul><br />
<li>Подробную информацию о том, за что отвечает каждый файл в этой папке, вы можете получить из комментариев в начале каждого файла.</li><br />
<li>В папке login_do находятся шаблоны для вывода результата попытки входа на сайт</li><br />
</ul><br />
====Опросы====<br />
Вывод опросов на сайте описан в папке vote. Здесь находится<br />
<ul><br />
<li>Вывод блока отзывов о товаре - element_rating.phtml</li><br />
<li>Формы опроса - form.phtml</li><br />
<li>Вывода опроса/его результатов - poll.phtml</li><br />
<li>Результаты опроса - result.phtml</li><br />
<li>Шаблон обработки результата макроса установки рейтинга - setElementRating.phtml</li><br />
<li>Вывод опроса или его результата - show_vote.phtml</li><br />
</ul><br />
====Обратная связь====<br />
Функционал форм обратной связи описан в папке webforms.<br />
<ul><br />
<li>Форма всплывающего окна "Заказать звонок" - callback.phtml</li><br />
<li>Страница формы обратной связи - page.phtml</li><br />
<li>Страница с сообщением об успешно отправленной форме - posted.phtml</li><br />
<li>В папке page находятся вспомогательные файлы для вывода данных форм.</li><br />
</ul><br />
<br />
===Языковые константы ===<br />
Используемые в решении языковые константы расположены в папке i18n<br />
[[category:Вопросы и уроки разработки сайтов на UMI.CMS]]</div>Alelekovhttps://wiki.umisoft.ru/index.php?title=%D0%98%D0%B5%D1%80%D0%B0%D1%80%D1%85%D0%B8%D1%8F_%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%D0%B0_Demomarket&diff=9286Иерархия шаблона Demomarket2019-06-28T12:54:09Z<p>Alelekov: /* Содержимое тега */</p>
<hr />
<div>'''Актуально для версии 20'''<br />
<br />
== Цель ==<br />
Описать иерархию шаблона Demomarket, т.к. довольно часто имеется необходимость отредактировать те или иные данные, что бывает сложно для пользователя, не знакомого с иерархической структурой шаблона.<br />
<br />
== Описание ==<br />
Все файлы шаблона, ответственные за визуальное отображение тех или иных элементов, находятся в папке templates/demomarket/php.<br />
<br />
=== Базовый функционал шаблона ===<br />
==== Точка входа в шаблон ====<br />
"Построение" скелета сайта начинается с файла common.phtml, в нём происходит инициализация общих переменных (глобальный массив $variables) и этот файл является точкой входа в шаблон.<br />
==== Скелет сайта ====<br />
Скелет сайта - head, body, header и footer строится в файле templates/demomarket/php/layout/index.phtml. Здесь осуществляется вызов отрисовки перечисленных нами блоков.<br />
===== Содержимое тега <head> =====<br />
Содержимое тега <head> располагается в файле /templates/demomarket/php/layout/head.phtml. Здесь происходит проставление мета-тегов, подключение различных скриптов и стилей.<br />
=====Содержимое тега <header>=====<br />
Содержимое тега <header> располагается в файле /templates/demomarket/php/layout/header/index.phtml. Здесь происходит вызов отображения:<br />
<ul><br />
<li>Всех всплывающих окон на сайте(layout/modal/index.phtml)</li><br />
<li>Шапка сайта в мобильной версии(layout/header/mobile.phtml)</li> <br />
<li>Меню в мобильной версии(layout/header/mobile_menu.phtml)</li> <br />
<li>Верхний ряд шапки сайта - меню основных страниц(layout/header/top/index.phtml)</li> <br />
<li>Средний ряд шапки сайта - блок с логотипом, форма "Заказать звонок", режим работы, корзина товаров. (layout/header/middle/index.phtml)</li><br />
<li>Нижний ряд в шапке сайта - меню каталога товаров, форма поиска, блок с кнопкой сравнения товаров и входа на сайт/панель управления пользователя. (layout/header/bottom/index.phtml)</li><br />
</ul><br />
<br />
=====Основной контент страницы=====<br />
Вывод основного контента страницы располагается в файле /templates/demomarket/php/layout/main.phtml. Здесь происходит назначение шаблона для вывода ошибок, настройка роутинга для работы по принципу модуль/метод.<br />
===== Содержимое тега <footer> =====<br />
Вывод содержимого тега <footer> располагается в файле /templates/demomarket/php/layout/footer/index.phtml. Здесь происходит вывод визуального оформления подвала сайта для десктопной и мобильной версий шаблона.<br />
<br />
===Обработка методов системы===<br />
Благодаря роутингу модуль/метод, который мы настроили в основном контенте страницы, вывод каждого результата нашего запроса будет обеспечен соответствующим файлом. Например, если мы переходим в модуль Каталог(/catalog/) - автоматически вызывается метод category. В таком случае для того, чтобы у нас что-то вывелось на сайте, нужна папка catalog, в которой будет существовать соответствующий файл для вывода результатов работы метода - category.phtml.<br />
====Онлайн-запись(Услуги)====<br />
Вывод данных для функционала онлайн записи находится в папке appointment. Здесь имеется единственный файл page.phtml, в котором и реализован весь вывод.<br />
====Блоги====<br />
Вывод данных для функционала блогов находится в папке blogs20. <br />
Здесь располагаются<br />
<ul><br />
<li>Страница блога - blog.phtml</li><br />
<li>Комментарй к посту блога - comment.phtml </li><br />
<li>Пост блога - post.phtml</li><br />
<li>В папках post и comments находятся дополнительные файлы для вывода результатов обработки функционала комментариев и постов блога.</li><br />
</ul><br />
====Каталог====<br />
Вывод данных для функционала каталога находится в папке catalog. <br />
<ul><br />
<li>Для вывода категорий каталога используется файл category.phtml. </li><br />
<li>Для вывода страницы товара используется файл object.phtml.</li><br />
<li>Для вывода превью товара используются шаблона в папке /product/preview</li><br />
<li>Для вывода полной карточки товара используются шаблона в папке /product/main</li><br />
</ul><br />
====Комментарии====<br />
Вывод данных для функционала комментариев находится в папке comments. <br />
<ul><br />
<li>Для вывода страницы комментария используется файл comment.phtml </li><br />
<li>Для вывода списка комментариев с пагинацией используется файл insert.phtml.</li><br />
<li>В папке comments/comment находятся файлы для отображения формы добавления нового комментария(new.phtml) и для превью комментария(preview.phtml)</li><br />
</ul><br />
====Контент====<br />
Вывод данных для функционала комментариев находится в папке content. <br />
<ul><br />
<li>Вывод страницы контента - content.phtml. Вывод страницы по умолчанию обрабатывается по отдельному шаблону content/home/index</li><br />
<li>Вывод страницы 404 - notfound.phtml</li><br />
<li>Карта сайта - sitemap.phtml</li><br />
<li>В папке sitemap находятся вспомогательные файлы для вывода карты сайта.</li><br />
<li>В папке home находятся все необходимые шаблоны отображения для контента главной страницы сайта. Более подробную информацию о том, за что отвечает каждый файл, вы можете получить в комментарии, который расположен в начале каждого файла.</li><br />
</ul><br />
====Формы====<br />
В папке data находятся файлы для отображения форм на сайте.<br />
<ul><br />
<li>Отрисовка каждой группы формы и каждое поле группы в зависимости от типа данных - form.phtml.</li><br />
<li>В папке form_field находятся файлы для отображения того или иного типа поля формы.</li><br />
</ul><br />
====Рассылки====<br />
Вывод данных для функционала рассылок находится в папке dispatches. <br />
<ul><br />
<li>Страница подписки на рассылку - subscribe.phtml</li><br />
<li>Страница результата подписки на рассылку - subscribe_do.phtml</li><br />
<li>Страница отписки от рассылки - subscribe.phtml</li><br />
</ul><br />
====Интернет-магазин====<br />
Весь функционал, связанный с интернет-магазином, описан в папке emarket.<br />
<ul><br />
<li>Корзина товаров - cart.phtml. Все элементы, связанные с корзиной товаров, выводятся по отдельным шаблонам, расположенным в папке cart.</li><br />
<li>Страница сравнения товаров - compare.phtml. Все элементы, связанные со сравнением товаров, выводятся по отдельным шаблонам, расположенным в папке compare.</li><br />
<li>Старая цена товара - old_price.phtml.</li><br />
<li>Вывод списка заказов пользователя - ordersList.phtml.</li><br />
<li>Страница личного кабинета покупателя - personal.phtml.</li><br />
<li>Оформление заказа по шагам - purchase.phtml.</li><br />
<li>Оформление заказа в один шаг - purchasing_one_step.phtml.</li><br />
<li>Прогресс-бар с шагами оформления заказа - steps.phtml.</li><br />
</ul><br />
<br />
====FAQ====<br />
В папке faq содержится функционал "Вопрос-ответ" на сайте.<br />
<ul><br />
<li>Страница категории в модуле FAQ - category.phtml</li><br />
<li>Страница успешно заданного вопроса = post_question.phtml</li><br />
<li>Страница проекта в модуле FAQ - project.phtml</li><br />
<li>Страница вопроса - question.phtml</li><br />
<li>В папках question и category находятся вспомогательные файлы для вывода категорий вопросов и вопросов</li><br />
</ul><br />
====Файловый менеджер====<br />
В папке filemanager находится функционал для работы с файлами на сайте. Здесь имеется единственный шаблон для страницы скачиваемого файла - shared_file.phtml.<br />
====Форум====<br />
В папке forum располагается функционал форума на сайте.<br />
<ul><br />
<li>Конференция форума - conf.phtml</li><br />
<li>Страница сообщения в топике форума - message.phtml</li><br />
<li>Топик форума - topic.phtml</li><br />
<li>В папках message и topic содержатся вспомогательные файлы для вывода сообщений и тем форума.</li><br />
</ul><br />
====Новости====<br />
Весь функционал отображения новостей на сайте находится в папке news.<br />
<ul><br />
<li>Страница новости - item.phtml</li><br />
<li>Лента новостей - rubric.phtml</li><br />
<li>Превью новости в ленте - rubric_item.phtml</li><br />
<li>В папке item находятся вспомогательные файлы для вывода элементов новости.</li><br />
</ul><br />
====Фотоальбом/Фотогалерея====<br />
Функционал фотогалереи на сайте находится в папке photoalbum.<br />
Здесь имеются только два файла:<br />
<ul><br />
<li>Альбом с фотографиями - album.phtml</li><br />
<li>Страница фотографии - photo.phtml</li><br />
</ul><br />
====Поиск====<br />
Функционал вывода данных поиска по сайту расположен в папке search.<br />
<ul><br />
<li>Результаты поиска - result.phtml</li><br />
<li>Страница с результатами поиска - search_do.phtml</li><br />
</ul><br />
====Пользователи====<br />
Функционал вывода данных для пользователя на сайте находится в папке users.<br />
<ul><br />
<li>Подробную информацию о том, за что отвечает каждый файл в этой папке, вы можете получить из комментариев в начале каждого файла.</li><br />
<li>В папке login_do находятся шаблоны для вывода результата попытки входа на сайт</li><br />
</ul><br />
====Опросы====<br />
Вывод опросов на сайте описан в папке vote. Здесь находится<br />
<ul><br />
<li>Вывод блока отзывов о товаре - element_rating.phtml</li><br />
<li>Формы опроса - form.phtml</li><br />
<li>Вывода опроса/его результатов - poll.phtml</li><br />
<li>Результаты опроса - result.phtml</li><br />
<li>Шаблон обработки результата макроса установки рейтинга - setElementRating.phtml</li><br />
<li>Вывод опроса или его результата - show_vote.phtml</li><br />
</ul><br />
====Обратная связь====<br />
Функционал форм обратной связи описан в папке webforms.<br />
<ul><br />
<li>Форма всплывающего окна "Заказать звонок" - callback.phtml</li><br />
<li>Страница формы обратной связи - page.phtml</li><br />
<li>Страница с сообщением об успешно отправленной форме - posted.phtml</li><br />
<li>В папке page находятся вспомогательные файлы для вывода данных форм.</li><br />
</ul><br />
<br />
===Языковые константы ===<br />
Используемые в решении языковые константы расположены в папке i18n<br />
[[category:Вопросы и уроки разработки сайтов на UMI.CMS]]</div>Alelekovhttps://wiki.umisoft.ru/index.php?title=%D0%98%D0%B5%D1%80%D0%B0%D1%80%D1%85%D0%B8%D1%8F_%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%D0%B0_Demomarket&diff=9285Иерархия шаблона Demomarket2019-06-28T12:53:35Z<p>Alelekov: </p>
<hr />
<div>'''Актуально для версии 20'''<br />
<br />
== Цель ==<br />
Описать иерархию шаблона Demomarket, т.к. довольно часто имеется необходимость отредактировать те или иные данные, что бывает сложно для пользователя, не знакомого с иерархической структурой шаблона.<br />
<br />
== Описание ==<br />
Все файлы шаблона, ответственные за визуальное отображение тех или иных элементов, находятся в папке templates/demomarket/php.<br />
<br />
=== Базовый функционал шаблона ===<br />
==== Точка входа в шаблон ====<br />
"Построение" скелета сайта начинается с файла common.phtml, в нём происходит инициализация общих переменных (глобальный массив $variables) и этот файл является точкой входа в шаблон.<br />
==== Скелет сайта ====<br />
Скелет сайта - head, body, header и footer строится в файле templates/demomarket/php/layout/index.phtml. Здесь осуществляется вызов отрисовки перечисленных нами блоков.<br />
===== Содержимое тега <head> =====<br />
Содержимое тега <head> располагается в файле /templates/demomarket/php/layout/head.phtml. Здесь происходит проставление мета-тегов, подключение различных скриптов и стилей.<br />
=====Содержимое тега <header>=====<br />
Содержимое тега <header> располагается в файле /templates/demomarket/php/layout/header/index.phtml. Здесь происходит вызов отображения:<br />
<ul><br />
<li>Всех всплывающих окон на сайте(layout/modal/index.phtml)</li><br />
<li>Шапка сайта в мобильной версии(layout/header/mobile.phtml)</li> <br />
<li>Меню в мобильной версии(layout/header/mobile_menu.phtml)</li> <br />
<li>Верхний ряд шапки сайта - меню основных страниц(layout/header/top/index.phtml)</li> <br />
<li>Средний ряд шапки сайта - блок с логотипом, форма "Заказать звонок", режим работы, корзина товаров. (layout/header/middle/index)</li><br />
<li>Нижний ряд в шапке сайта - меню каталога товаров, форма поиска, блок с кнопкой сравнения товаров и входа на сайт/панель управления пользователя. (layout/header/bottom/index)</li><br />
</ul><br />
=====Основной контент страницы=====<br />
Вывод основного контента страницы располагается в файле /templates/demomarket/php/layout/main.phtml. Здесь происходит назначение шаблона для вывода ошибок, настройка роутинга для работы по принципу модуль/метод.<br />
===== Содержимое тега <footer> =====<br />
Вывод содержимого тега <footer> располагается в файле /templates/demomarket/php/layout/footer/index.phtml. Здесь происходит вывод визуального оформления подвала сайта для десктопной и мобильной версий шаблона.<br />
<br />
===Обработка методов системы===<br />
Благодаря роутингу модуль/метод, который мы настроили в основном контенте страницы, вывод каждого результата нашего запроса будет обеспечен соответствующим файлом. Например, если мы переходим в модуль Каталог(/catalog/) - автоматически вызывается метод category. В таком случае для того, чтобы у нас что-то вывелось на сайте, нужна папка catalog, в которой будет существовать соответствующий файл для вывода результатов работы метода - category.phtml.<br />
====Онлайн-запись(Услуги)====<br />
Вывод данных для функционала онлайн записи находится в папке appointment. Здесь имеется единственный файл page.phtml, в котором и реализован весь вывод.<br />
====Блоги====<br />
Вывод данных для функционала блогов находится в папке blogs20. <br />
Здесь располагаются<br />
<ul><br />
<li>Страница блога - blog.phtml</li><br />
<li>Комментарй к посту блога - comment.phtml </li><br />
<li>Пост блога - post.phtml</li><br />
<li>В папках post и comments находятся дополнительные файлы для вывода результатов обработки функционала комментариев и постов блога.</li><br />
</ul><br />
====Каталог====<br />
Вывод данных для функционала каталога находится в папке catalog. <br />
<ul><br />
<li>Для вывода категорий каталога используется файл category.phtml. </li><br />
<li>Для вывода страницы товара используется файл object.phtml.</li><br />
<li>Для вывода превью товара используются шаблона в папке /product/preview</li><br />
<li>Для вывода полной карточки товара используются шаблона в папке /product/main</li><br />
</ul><br />
====Комментарии====<br />
Вывод данных для функционала комментариев находится в папке comments. <br />
<ul><br />
<li>Для вывода страницы комментария используется файл comment.phtml </li><br />
<li>Для вывода списка комментариев с пагинацией используется файл insert.phtml.</li><br />
<li>В папке comments/comment находятся файлы для отображения формы добавления нового комментария(new.phtml) и для превью комментария(preview.phtml)</li><br />
</ul><br />
====Контент====<br />
Вывод данных для функционала комментариев находится в папке content. <br />
<ul><br />
<li>Вывод страницы контента - content.phtml. Вывод страницы по умолчанию обрабатывается по отдельному шаблону content/home/index</li><br />
<li>Вывод страницы 404 - notfound.phtml</li><br />
<li>Карта сайта - sitemap.phtml</li><br />
<li>В папке sitemap находятся вспомогательные файлы для вывода карты сайта.</li><br />
<li>В папке home находятся все необходимые шаблоны отображения для контента главной страницы сайта. Более подробную информацию о том, за что отвечает каждый файл, вы можете получить в комментарии, который расположен в начале каждого файла.</li><br />
</ul><br />
====Формы====<br />
В папке data находятся файлы для отображения форм на сайте.<br />
<ul><br />
<li>Отрисовка каждой группы формы и каждое поле группы в зависимости от типа данных - form.phtml.</li><br />
<li>В папке form_field находятся файлы для отображения того или иного типа поля формы.</li><br />
</ul><br />
====Рассылки====<br />
Вывод данных для функционала рассылок находится в папке dispatches. <br />
<ul><br />
<li>Страница подписки на рассылку - subscribe.phtml</li><br />
<li>Страница результата подписки на рассылку - subscribe_do.phtml</li><br />
<li>Страница отписки от рассылки - subscribe.phtml</li><br />
</ul><br />
====Интернет-магазин====<br />
Весь функционал, связанный с интернет-магазином, описан в папке emarket.<br />
<ul><br />
<li>Корзина товаров - cart.phtml. Все элементы, связанные с корзиной товаров, выводятся по отдельным шаблонам, расположенным в папке cart.</li><br />
<li>Страница сравнения товаров - compare.phtml. Все элементы, связанные со сравнением товаров, выводятся по отдельным шаблонам, расположенным в папке compare.</li><br />
<li>Старая цена товара - old_price.phtml.</li><br />
<li>Вывод списка заказов пользователя - ordersList.phtml.</li><br />
<li>Страница личного кабинета покупателя - personal.phtml.</li><br />
<li>Оформление заказа по шагам - purchase.phtml.</li><br />
<li>Оформление заказа в один шаг - purchasing_one_step.phtml.</li><br />
<li>Прогресс-бар с шагами оформления заказа - steps.phtml.</li><br />
</ul><br />
<br />
====FAQ====<br />
В папке faq содержится функционал "Вопрос-ответ" на сайте.<br />
<ul><br />
<li>Страница категории в модуле FAQ - category.phtml</li><br />
<li>Страница успешно заданного вопроса = post_question.phtml</li><br />
<li>Страница проекта в модуле FAQ - project.phtml</li><br />
<li>Страница вопроса - question.phtml</li><br />
<li>В папках question и category находятся вспомогательные файлы для вывода категорий вопросов и вопросов</li><br />
</ul><br />
====Файловый менеджер====<br />
В папке filemanager находится функционал для работы с файлами на сайте. Здесь имеется единственный шаблон для страницы скачиваемого файла - shared_file.phtml.<br />
====Форум====<br />
В папке forum располагается функционал форума на сайте.<br />
<ul><br />
<li>Конференция форума - conf.phtml</li><br />
<li>Страница сообщения в топике форума - message.phtml</li><br />
<li>Топик форума - topic.phtml</li><br />
<li>В папках message и topic содержатся вспомогательные файлы для вывода сообщений и тем форума.</li><br />
</ul><br />
====Новости====<br />
Весь функционал отображения новостей на сайте находится в папке news.<br />
<ul><br />
<li>Страница новости - item.phtml</li><br />
<li>Лента новостей - rubric.phtml</li><br />
<li>Превью новости в ленте - rubric_item.phtml</li><br />
<li>В папке item находятся вспомогательные файлы для вывода элементов новости.</li><br />
</ul><br />
====Фотоальбом/Фотогалерея====<br />
Функционал фотогалереи на сайте находится в папке photoalbum.<br />
Здесь имеются только два файла:<br />
<ul><br />
<li>Альбом с фотографиями - album.phtml</li><br />
<li>Страница фотографии - photo.phtml</li><br />
</ul><br />
====Поиск====<br />
Функционал вывода данных поиска по сайту расположен в папке search.<br />
<ul><br />
<li>Результаты поиска - result.phtml</li><br />
<li>Страница с результатами поиска - search_do.phtml</li><br />
</ul><br />
====Пользователи====<br />
Функционал вывода данных для пользователя на сайте находится в папке users.<br />
<ul><br />
<li>Подробную информацию о том, за что отвечает каждый файл в этой папке, вы можете получить из комментариев в начале каждого файла.</li><br />
<li>В папке login_do находятся шаблоны для вывода результата попытки входа на сайт</li><br />
</ul><br />
====Опросы====<br />
Вывод опросов на сайте описан в папке vote. Здесь находится<br />
<ul><br />
<li>Вывод блока отзывов о товаре - element_rating.phtml</li><br />
<li>Формы опроса - form.phtml</li><br />
<li>Вывода опроса/его результатов - poll.phtml</li><br />
<li>Результаты опроса - result.phtml</li><br />
<li>Шаблон обработки результата макроса установки рейтинга - setElementRating.phtml</li><br />
<li>Вывод опроса или его результата - show_vote.phtml</li><br />
</ul><br />
====Обратная связь====<br />
Функционал форм обратной связи описан в папке webforms.<br />
<ul><br />
<li>Форма всплывающего окна "Заказать звонок" - callback.phtml</li><br />
<li>Страница формы обратной связи - page.phtml</li><br />
<li>Страница с сообщением об успешно отправленной форме - posted.phtml</li><br />
<li>В папке page находятся вспомогательные файлы для вывода данных форм.</li><br />
</ul><br />
<br />
===Языковые константы ===<br />
Используемые в решении языковые константы расположены в папке i18n<br />
[[category:Вопросы и уроки разработки сайтов на UMI.CMS]]</div>Alelekovhttps://wiki.umisoft.ru/index.php?title=%D0%98%D0%B5%D1%80%D0%B0%D1%80%D1%85%D0%B8%D1%8F_%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%D0%B0_Demomarket&diff=9284Иерархия шаблона Demomarket2019-06-28T12:52:32Z<p>Alelekov: /* emarket */</p>
<hr />
<div>'''Актуально для версии 20'''<br />
<br />
== Цель ==<br />
Описать иерархию шаблона Demomarket, т.к. довольно часто имеется необходимость отредактировать те или иные данные, что бывает сложно для пользователя, не знакомого с иерархической структурой шаблона.<br />
<br />
== Описание ==<br />
Все файлы шаблона, ответственные за визуальное отображение тех или иных элементов, находятся в папке templates/demomarket/php.<br />
<br />
=== Базовый функционал шаблона ===<br />
==== Точка входа в шаблон ====<br />
"Построение" скелета сайта начинается с файла common.phtml, в нём происходит инициализация общих переменных (глобальный массив $variables) и этот файл является точкой входа в шаблон.<br />
==== Скелет сайта ====<br />
Скелет сайта - head, body, header и footer строится в файле templates/demomarket/php/layout/index.phtml. Здесь осуществляется вызов отрисовки перечисленных нами блоков.<br />
===== Содержимое тега <head> =====<br />
Содержимое тега <head> располагается в файле /templates/demomarket/php/layout/head.phtml. Здесь происходит проставление мета-тегов, подключение различных скриптов и стилей.<br />
=====Содержимое тега <header>=====<br />
Содержимое тега <header> располагается в файле /templates/demomarket/php/layout/header/index.phtml. Здесь происходит вызов отображения:<br />
<ul><br />
<li>Всех всплывающих окон на сайте(layout/modal/index.phtml)</li><br />
<li>Шапка сайта в мобильной версии(layout/header/mobile.phtml)</li> <br />
<li>Меню в мобильной версии(layout/header/mobile_menu.phtml)</li> <br />
<li>Верхний ряд шапки сайта - меню основных страниц(layout/header/top/index.phtml)</li> <br />
<li>Средний ряд шапки сайта - блок с логотипом, форма "Заказать звонок", режим работы, корзина товаров. (layout/header/middle/index)</li><br />
<li>Нижний ряд в шапке сайта - меню каталога товаров, форма поиска, блок с кнопкой сравнения товаров и входа на сайт/панель управления пользователя. (layout/header/bottom/index)</li><br />
</ul><br />
=====Основной контент страницы=====<br />
Вывод основного контента страницы располагается в файле /templates/demomarket/php/layout/main.phtml. Здесь происходит назначение шаблона для вывода ошибок, настройка роутинга для работы по принципу модуль/метод.<br />
===== Содержимое тега <footer> =====<br />
Вывод содержимого тега <footer> располагается в файле /templates/demomarket/php/layout/footer/index.phtml. Здесь происходит вывод визуального оформления подвала сайта для десктопной и мобильной версий шаблона.<br />
<br />
===Обработка методов системы===<br />
Благодаря роутингу модуль/метод, который мы настроили в основном контенте страницы, вывод каждого результата нашего запроса будет обеспечен соответствующим файлом. Например, если мы переходим в модуль Каталог(/catalog/) - автоматически вызывается метод category. В таком случае для того, чтобы у нас что-то вывелось на сайте, нужна папка catalog, в которой будет существовать соответствующий файл для вывода результатов работы метода - category.phtml.<br />
====Онлайн-запись(Услуги)====<br />
Вывод данных для функционала онлайн записи находится в папке appointment. Здесь имеется единственный файл page.phtml, в котором и реализован весь вывод.<br />
====Блоги====<br />
Вывод данных для функционала блогов находится в папке blogs20. <br />
Здесь располагаются<br />
<ul><br />
<li>Страница блога - blog.phtml</li><br />
<li>Комментарй к посту блога - comment.phtml </li><br />
<li>Пост блога - post.phtml</li><br />
<li>В папках post и comments находятся дополнительные файлы для вывода результатов обработки функционала комментариев и постов блога.</li><br />
</ul><br />
====Каталог====<br />
Вывод данных для функционала каталога находится в папке catalog. <br />
<ul><br />
<li>Для вывода категорий каталога используется файл category.phtml. </li><br />
<li>Для вывода страницы товара используется файл object.phtml.</li><br />
<li>Для вывода превью товара используются шаблона в папке /product/preview</li><br />
<li>Для вывода полной карточки товара используются шаблона в папке /product/main</li><br />
</ul><br />
====Комментарии====<br />
Вывод данных для функционала комментариев находится в папке comments. <br />
<ul><br />
<li>Для вывода страницы комментария используется файл comment.phtml </li><br />
<li>Для вывода списка комментариев с пагинацией используется файл insert.phtml.</li><br />
<li>В папке comments/comment находятся файлы для отображения формы добавления нового комментария(new.phtml) и для превью комментария(preview.phtml)</li><br />
</ul><br />
====Контент====<br />
Вывод данных для функционала комментариев находится в папке content. <br />
<ul><br />
<li>Вывод страницы контента - content.phtml. Вывод страницы по умолчанию обрабатывается по отдельному шаблону content/home/index</li><br />
<li>Вывод страницы 404 - notfound.phtml</li><br />
<li>Карта сайта - sitemap.phtml</li><br />
<li>В папке sitemap находятся вспомогательные файлы для вывода карты сайта.</li><br />
<li>В папке home находятся все необходимые шаблоны отображения для контента главной страницы сайта. Более подробную информацию о том, за что отвечает каждый файл, вы можете получить в комментарии, который расположен в начале каждого файла.</li><br />
</ul><br />
====Формы====<br />
В папке data находятся файлы для отображения форм на сайте.<br />
<ul><br />
<li>Отрисовка каждой группы формы и каждое поле группы в зависимости от типа данных - form.phtml.</li><br />
<li>В папке form_field находятся файлы для отображения того или иного типа поля формы.</li><br />
</ul><br />
====Рассылки====<br />
Вывод данных для функционала рассылок находится в папке dispatches. <br />
<ul><br />
<li>Страница подписки на рассылку - subscribe.phtml</li><br />
<li>Страница результата подписки на рассылку - subscribe_do.phtml</li><br />
<li>Страница отписки от рассылки - subscribe.phtml</li><br />
</ul><br />
====Интернет-магазин====<br />
Весь функционал, связанный с интернет-магазином, описан в папке emarket.<br />
<ul><br />
<li>Корзина товаров - cart.phtml. Все элементы, связанные с корзиной товаров, выводятся по отдельным шаблонам, расположенным в папке cart.</li><br />
<li>Страница сравнения товаров - compare.phtml. Все элементы, связанные со сравнением товаров, выводятся по отдельным шаблонам, расположенным в папке compare.</li><br />
<li>Старая цена товара - old_price.phtml.</li><br />
<li>Вывод списка заказов пользователя - ordersList.phtml.</li><br />
<li>Страница личного кабинета покупателя - personal.phtml.</li><br />
<li>Оформление заказа по шагам - purchase.phtml.</li><br />
<li>Оформление заказа в один шаг - purchasing_one_step.phtml.</li><br />
<li>Прогресс-бар с шагами оформления заказа - steps.phtml.</li><br />
</ul><br />
<br />
====FAQ====<br />
В папке faq содержится функционал "Вопрос-ответ" на сайте.<br />
<ul><br />
<li>Страница категории в модуле FAQ - category.phtml</li><br />
<li>Страница успешно заданного вопроса = post_question.phtml</li><br />
<li>Страница проекта в модуле FAQ - project.phtml</li><br />
<li>Страница вопроса - question.phtml</li><br />
<li>В папках question и category находятся вспомогательные файлы для вывода категорий вопросов и вопросов</li><br />
</ul><br />
====Файловый менеджер====<br />
В папке filemanager находится функционал для работы с файлами на сайте. Здесь имеется единственный шаблон для страницы скачиваемого файла - shared_file.phtml.<br />
====Форум====<br />
В папке forum располагается функционал форума на сайте.<br />
<ul><br />
<li>Конференция форума - conf.phtml</li><br />
<li>Страница сообщения в топике форума - message.phtml</li><br />
<li>Топик форума - topic.phtml</li><br />
<li>В папках message и topic содержатся вспомогательные файлы для вывода сообщений и тем форума.</li><br />
</ul><br />
====Новости====<br />
Весь функционал отображения новостей на сайте находится в папке news.<br />
<ul><br />
<li>Страница новости - item.phtml</li><br />
<li>Лента новостей - rubric.phtml</li><br />
<li>Превью новости в ленте - rubric_item.phtml</li><br />
<li>В папке item находятся вспомогательные файлы для вывода элементов новости.</li><br />
</ul><br />
====Фотоальбом/Фотогалерея====<br />
Функционал фотогалереи на сайте находится в папке photoalbum.<br />
Здесь имеются только два файла:<br />
<ul><br />
<li>Альбом с фотографиями - album.phtml</li><br />
<li>Страница фотографии - photo.phtml</li><br />
<ul><br />
====Поиск====<br />
Функционал вывода данных поиска по сайту расположен в папке search.<br />
<ul><br />
<li>Результаты поиска - result.phtml</li><br />
<li>Страница с результатами поиска - search_do.phtml</li><br />
<ul><br />
====Пользователи====<br />
Функционал вывода данных для пользователя на сайте находится в папке users.<br />
<ul><br />
<li>Подробную информацию о том, за что отвечает каждый файл в этой папке, вы можете получить из комментариев в начале каждого файла.</li><br />
<li>В папке login_do находятся шаблоны для вывода результата попытки входа на сайт</li><br />
<ul><br />
====Опросы====<br />
Вывод опросов на сайте описан в папке vote. Здесь находится<br />
<ul><br />
<li>Вывод блока отзывов о товаре - element_rating.phtml</li><br />
<li>Формы опроса - form.phtml</li><br />
<li>Вывода опроса/его результатов - poll.phtml</li><br />
<li>Результаты опроса - result.phtml</li><br />
<li>Шаблон обработки результата макроса установки рейтинга - setElementRating.phtml</li><br />
<li>Вывод опроса или его результата - show_vote.phtml</li><br />
<ul><br />
====Обратная связь====<br />
Функционал форм обратной связи описан в папке webforms.<br />
<ul><br />
<li>Форма всплывающего окна "Заказать звонок" - callback.phtml</li><br />
<li>Страница формы обратной связи - page.phtml</li><br />
<li>Страница с сообщением об успешно отправленной форме - posted.phtml</li><br />
<li>В папке page находятся вспомогательные файлы для вывода данных форм.</li><br />
</ul><br />
<br />
[[category:Вопросы и уроки разработки сайтов на UMI.CMS]]</div>Alelekovhttps://wiki.umisoft.ru/index.php?title=%D0%98%D0%B5%D1%80%D0%B0%D1%80%D1%85%D0%B8%D1%8F_%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%D0%B0_Demomarket&diff=9283Иерархия шаблона Demomarket2019-06-28T12:51:53Z<p>Alelekov: /* emarket */</p>
<hr />
<div>'''Актуально для версии 20'''<br />
<br />
== Цель ==<br />
Описать иерархию шаблона Demomarket, т.к. довольно часто имеется необходимость отредактировать те или иные данные, что бывает сложно для пользователя, не знакомого с иерархической структурой шаблона.<br />
<br />
== Описание ==<br />
Все файлы шаблона, ответственные за визуальное отображение тех или иных элементов, находятся в папке templates/demomarket/php.<br />
<br />
=== Базовый функционал шаблона ===<br />
==== Точка входа в шаблон ====<br />
"Построение" скелета сайта начинается с файла common.phtml, в нём происходит инициализация общих переменных (глобальный массив $variables) и этот файл является точкой входа в шаблон.<br />
==== Скелет сайта ====<br />
Скелет сайта - head, body, header и footer строится в файле templates/demomarket/php/layout/index.phtml. Здесь осуществляется вызов отрисовки перечисленных нами блоков.<br />
===== Содержимое тега <head> =====<br />
Содержимое тега <head> располагается в файле /templates/demomarket/php/layout/head.phtml. Здесь происходит проставление мета-тегов, подключение различных скриптов и стилей.<br />
=====Содержимое тега <header>=====<br />
Содержимое тега <header> располагается в файле /templates/demomarket/php/layout/header/index.phtml. Здесь происходит вызов отображения:<br />
<ul><br />
<li>Всех всплывающих окон на сайте(layout/modal/index.phtml)</li><br />
<li>Шапка сайта в мобильной версии(layout/header/mobile.phtml)</li> <br />
<li>Меню в мобильной версии(layout/header/mobile_menu.phtml)</li> <br />
<li>Верхний ряд шапки сайта - меню основных страниц(layout/header/top/index.phtml)</li> <br />
<li>Средний ряд шапки сайта - блок с логотипом, форма "Заказать звонок", режим работы, корзина товаров. (layout/header/middle/index)</li><br />
<li>Нижний ряд в шапке сайта - меню каталога товаров, форма поиска, блок с кнопкой сравнения товаров и входа на сайт/панель управления пользователя. (layout/header/bottom/index)</li><br />
</ul><br />
=====Основной контент страницы=====<br />
Вывод основного контента страницы располагается в файле /templates/demomarket/php/layout/main.phtml. Здесь происходит назначение шаблона для вывода ошибок, настройка роутинга для работы по принципу модуль/метод.<br />
===== Содержимое тега <footer> =====<br />
Вывод содержимого тега <footer> располагается в файле /templates/demomarket/php/layout/footer/index.phtml. Здесь происходит вывод визуального оформления подвала сайта для десктопной и мобильной версий шаблона.<br />
<br />
===Обработка методов системы===<br />
Благодаря роутингу модуль/метод, который мы настроили в основном контенте страницы, вывод каждого результата нашего запроса будет обеспечен соответствующим файлом. Например, если мы переходим в модуль Каталог(/catalog/) - автоматически вызывается метод category. В таком случае для того, чтобы у нас что-то вывелось на сайте, нужна папка catalog, в которой будет существовать соответствующий файл для вывода результатов работы метода - category.phtml.<br />
====Онлайн-запись(Услуги)====<br />
Вывод данных для функционала онлайн записи находится в папке appointment. Здесь имеется единственный файл page.phtml, в котором и реализован весь вывод.<br />
====Блоги====<br />
Вывод данных для функционала блогов находится в папке blogs20. <br />
Здесь располагаются<br />
<ul><br />
<li>Страница блога - blog.phtml</li><br />
<li>Комментарй к посту блога - comment.phtml </li><br />
<li>Пост блога - post.phtml</li><br />
<li>В папках post и comments находятся дополнительные файлы для вывода результатов обработки функционала комментариев и постов блога.</li><br />
</ul><br />
====Каталог====<br />
Вывод данных для функционала каталога находится в папке catalog. <br />
<ul><br />
<li>Для вывода категорий каталога используется файл category.phtml. </li><br />
<li>Для вывода страницы товара используется файл object.phtml.</li><br />
<li>Для вывода превью товара используются шаблона в папке /product/preview</li><br />
<li>Для вывода полной карточки товара используются шаблона в папке /product/main</li><br />
</ul><br />
====Комментарии====<br />
Вывод данных для функционала комментариев находится в папке comments. <br />
<ul><br />
<li>Для вывода страницы комментария используется файл comment.phtml </li><br />
<li>Для вывода списка комментариев с пагинацией используется файл insert.phtml.</li><br />
<li>В папке comments/comment находятся файлы для отображения формы добавления нового комментария(new.phtml) и для превью комментария(preview.phtml)</li><br />
</ul><br />
====Контент====<br />
Вывод данных для функционала комментариев находится в папке content. <br />
<ul><br />
<li>Вывод страницы контента - content.phtml. Вывод страницы по умолчанию обрабатывается по отдельному шаблону content/home/index</li><br />
<li>Вывод страницы 404 - notfound.phtml</li><br />
<li>Карта сайта - sitemap.phtml</li><br />
<li>В папке sitemap находятся вспомогательные файлы для вывода карты сайта.</li><br />
<li>В папке home находятся все необходимые шаблоны отображения для контента главной страницы сайта. Более подробную информацию о том, за что отвечает каждый файл, вы можете получить в комментарии, который расположен в начале каждого файла.</li><br />
</ul><br />
====Формы====<br />
В папке data находятся файлы для отображения форм на сайте.<br />
<ul><br />
<li>Отрисовка каждой группы формы и каждое поле группы в зависимости от типа данных - form.phtml.</li><br />
<li>В папке form_field находятся файлы для отображения того или иного типа поля формы.</li><br />
</ul><br />
====Рассылки====<br />
Вывод данных для функционала рассылок находится в папке dispatches. <br />
<ul><br />
<li>Страница подписки на рассылку - subscribe.phtml</li><br />
<li>Страница результата подписки на рассылку - subscribe_do.phtml</li><br />
<li>Страница отписки от рассылки - subscribe.phtml</li><br />
</ul><br />
====emarket====<br />
====Интернет-магазин====<br />
Весь функционал, связанный с интернет-магазином, описан в папке emarket.<br />
<ul><br />
<li>Корзина товаров - cart.phtml. Все элементы, связанные с корзиной товаров, выводятся по отдельным шаблонам, расположенным в папке cart.</li><br />
<li>Страница сравнения товаров - compare.phtml. Все элементы, связанные со сравнением товаров, выводятся по отдельным шаблонам, расположенным в папке compare.</li><br />
<li>Старая цена товара - old_price.phtml.</li><br />
<li>Вывод списка заказов пользователя - ordersList.phtml.</li><br />
<li>Страница личного кабинета покупателя - personal.phtml.</li><br />
<li>Оформление заказа по шагам - purchase.phtml.</li><br />
<li>Оформление заказа в один шаг - purchasing_one_step.phtml.</li><br />
<li>Прогресс-бар с шагами оформления заказа - steps.phtml.</li><br />
</ul><br />
<br />
====FAQ====<br />
В папке faq содержится функционал "Вопрос-ответ" на сайте.<br />
<ul><br />
<li>Страница категории в модуле FAQ - category.phtml</li><br />
<li>Страница успешно заданного вопроса = post_question.phtml</li><br />
<li>Страница проекта в модуле FAQ - project.phtml</li><br />
<li>Страница вопроса - question.phtml</li><br />
<li>В папках question и category находятся вспомогательные файлы для вывода категорий вопросов и вопросов</li><br />
</ul><br />
====Файловый менеджер====<br />
В папке filemanager находится функционал для работы с файлами на сайте. Здесь имеется единственный шаблон для страницы скачиваемого файла - shared_file.phtml.<br />
====Форум====<br />
В папке forum располагается функционал форума на сайте.<br />
<ul><br />
<li>Конференция форума - conf.phtml</li><br />
<li>Страница сообщения в топике форума - message.phtml</li><br />
<li>Топик форума - topic.phtml</li><br />
<li>В папках message и topic содержатся вспомогательные файлы для вывода сообщений и тем форума.</li><br />
</ul><br />
====Новости====<br />
Весь функционал отображения новостей на сайте находится в папке news.<br />
<ul><br />
<li>Страница новости - item.phtml</li><br />
<li>Лента новостей - rubric.phtml</li><br />
<li>Превью новости в ленте - rubric_item.phtml</li><br />
<li>В папке item находятся вспомогательные файлы для вывода элементов новости.</li><br />
</ul><br />
====Фотоальбом/Фотогалерея====<br />
Функционал фотогалереи на сайте находится в папке photoalbum.<br />
Здесь имеются только два файла:<br />
<ul><br />
<li>Альбом с фотографиями - album.phtml</li><br />
<li>Страница фотографии - photo.phtml</li><br />
<ul><br />
====Поиск====<br />
Функционал вывода данных поиска по сайту расположен в папке search.<br />
<ul><br />
<li>Результаты поиска - result.phtml</li><br />
<li>Страница с результатами поиска - search_do.phtml</li><br />
<ul><br />
====Пользователи====<br />
Функционал вывода данных для пользователя на сайте находится в папке users.<br />
<ul><br />
<li>Подробную информацию о том, за что отвечает каждый файл в этой папке, вы можете получить из комментариев в начале каждого файла.</li><br />
<li>В папке login_do находятся шаблоны для вывода результата попытки входа на сайт</li><br />
<ul><br />
====Опросы====<br />
Вывод опросов на сайте описан в папке vote. Здесь находится<br />
<ul><br />
<li>Вывод блока отзывов о товаре - element_rating.phtml</li><br />
<li>Формы опроса - form.phtml</li><br />
<li>Вывода опроса/его результатов - poll.phtml</li><br />
<li>Результаты опроса - result.phtml</li><br />
<li>Шаблон обработки результата макроса установки рейтинга - setElementRating.phtml</li><br />
<li>Вывод опроса или его результата - show_vote.phtml</li><br />
<ul><br />
====Обратная связь====<br />
Функционал форм обратной связи описан в папке webforms.<br />
<ul><br />
<li>Форма всплывающего окна "Заказать звонок" - callback.phtml</li><br />
<li>Страница формы обратной связи - page.phtml</li><br />
<li>Страница с сообщением об успешно отправленной форме - posted.phtml</li><br />
<li>В папке page находятся вспомогательные файлы для вывода данных форм.</li><br />
</ul><br />
<br />
[[category:Вопросы и уроки разработки сайтов на UMI.CMS]]</div>Alelekovhttps://wiki.umisoft.ru/index.php?title=%D0%98%D0%B5%D1%80%D0%B0%D1%80%D1%85%D0%B8%D1%8F_%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%D0%B0_Demomarket&diff=9278Иерархия шаблона Demomarket2019-06-28T12:21:21Z<p>Alelekov: Новая страница: «'''Актуально для версии 20''' == Цель == Описать иерархию шаблона Demomarket, т.к. довольно часто им…»</p>
<hr />
<div>'''Актуально для версии 20'''<br />
<br />
== Цель ==<br />
Описать иерархию шаблона Demomarket, т.к. довольно часто имеется необходимость отредактировать те или иные данные, что бывает сложно для пользователя, не знакомого с иерархической структурой шаблона.<br />
<br />
== Описание ==<br />
Все файлы шаблона, ответственные за визуальное отображение тех или иных элементов, находятся в папке templates/demomarket/php.<br />
<br />
=== Базовый функционал шаблона ===<br />
==== Точка входа в шаблон ====<br />
"Построение" скелета сайта начинается с файла common.phtml, в нём происходит инициализация общих переменных (глобальный массив variables) и этот файл является точкой входа в шаблон.<br />
==== Скелет сайта ====<br />
Скелет сайта - head, body, header и footer строится в файле templates/demomarket/php/layout/index.phtml. Здесь осуществляется вызов отрисовки перечисленных нами блоков.<br />
===== Содержимое тега <head> =====<br />
Содержимое тега <head> располагается в файле /templates/demomarket/php/layout/head.phtml. Здесь происходит проставление мета-тегов, подключение различных скриптов и стилей.<br />
=====Содержимое тега <header>=====<br />
Содержимое тега <header> располагается в файле /templates/demomarket/php/layout/header/index.phtml. Здесь происходит вызов отображения:<br />
<ul><br />
<li>Всех всплывающих окон на сайте(layout/modal/index)</li><br />
<li>Шапка сайта в мобильной версии(layout/header/mobile)</li> <br />
<li>Меню в мобильной версии(layout/header/mobile_menu)</li> <br />
<li>Верхний ряд шапки сайта - меню основных страниц(layout/header/top/index.phtml)</li> <br />
<li>Средний ряд шапки сайта - блок с логотипом, форма "Заказать звонок", режим работы, корзина товаров. (layout/header/middle/index)</li><br />
<li>Нижний ряд в шапке сайта - меню каталога товаров, форма поиска, блок с кнопкой сравнения товаров и входа на сайт/панель управления пользователя. (layout/header/bottom/index)</li><br />
</ul><br />
=====Основной контент страницы=====<br />
Вывод основного контента страницы располагается в файле /templates/demomarket/php/layout/main.phtml. Здесь происходит назначение шаблона для вывода ошибок, настройка роутинга для работы по принципу модуль/метод.<br />
===== Содержимое тега <footer> =====<br />
Вывод содержимого тега <footer> располагается в файле /templates/demomarket/php/layout/footer/index.phtml. Здесь происходит вывод визуального оформления подвала сайта для десктопной и мобильной версий шаблона.<br />
<br />
===Обработка методов системы===<br />
Благодаря роутингу модуль/метод, который мы настроили в основном контенте страницы, вывод каждого результата нашего запроса будет обеспечен соответствующим файлом. Например, если мы переходим в модуль Каталог(/catalog/) - автоматически вызывается метод category. В таком случае для того, чтобы у нас что-то вывелось на сайте, нужна папка catalog, в которой будет существовать соответствующий файл для вывода результатов работы метода - category.phtml.<br />
====Онлайн-запись(Услуги)====<br />
Вывод данных для функционала онлайн записи находится в папке appointment. Здесь имеется единственный файл page.phtml, в котором и реализован весь вывод.<br />
====Блоги====<br />
Вывод данных для функционала блогов находится в папке blogs20. <br />
Здесь располагаются<br />
<ul><br />
<li>Страница блога - blog.phtml</li><br />
<li>Комментарй к посту блога - comment.phtml </li><br />
<li>Пост блога - post.phtml</li><br />
<li>В папках post и comments находятся дополнительные файлы для вывода результатов обработки функционала комментариев и постов блога.</li><br />
</ul><br />
====Каталог====<br />
Вывод данных для функционала каталога находится в папке catalog. <br />
<ul><br />
<li>Для вывода категорий каталога используется файл category.phtml. </li><br />
<li>Для вывода страницы товара используется файл object.phtml.</li><br />
<li>Для вывода превью товара используются шаблона в папке /product/preview</li><br />
<li>Для вывода полной карточки товара используются шаблона в папке /product/main</li><br />
</ul><br />
====Комментарии====<br />
Вывод данных для функционала комментариев находится в папке comments. <br />
<ul><br />
<li>Для вывода страницы комментария используется файл comment.phtml </li><br />
<li>Для вывода списка комментариев с пагинацией используется файл insert.phtml.</li><br />
<li>В папке comments/comment находятся файлы для отображения формы добавления нового комментария(new.phtml) и для превью комментария(preview.phtml)</li><br />
</ul><br />
====Контент====<br />
Вывод данных для функционала комментариев находится в папке content. <br />
<ul><br />
<li>Вывод страницы контента - content.phtml. Вывод страницы по умолчанию обрабатывается по отдельному шаблону content/home/index</li><br />
<li>Вывод страницы 404 - notfound.phtml</li><br />
<li>Карта сайта - sitemap.phtml</li><br />
<li>В папке sitemap находятся вспомогательные файлы для вывода карты сайта.</li><br />
<li>В папке home находятся все необходимые шаблоны отображения для контента главной страницы сайта. Более подробную информацию о том, за что отвечает каждый файл, вы можете получить в комментарии, который расположен в начале каждого файла.</li><br />
</ul><br />
====Формы====<br />
В папке data находятся файлы для отображения форм на сайте.<br />
<ul><br />
<li>Отрисовка каждой группы формы и каждое поле группы в зависимости от типа данных - form.phtml.</li><br />
<li>В папке form_field находятся файлы для отображения того или иного типа поля формы.</li><br />
</ul><br />
====Рассылки====<br />
Вывод данных для функционала рассылок находится в папке dispatches. <br />
<ul><br />
<li>Страница подписки на рассылку - subscribe.phtml</li><br />
<li>Страница результата подписки на рассылку - subscribe_do.phtml</li><br />
<li>Страница отписки от рассылки - subscribe.phtml</li><br />
</ul><br />
====emarket====<br />
====FAQ====<br />
В папке faq содержится функционал "Вопрос-ответ" на сайте.<br />
<ul><br />
<li>Страница категории в модуле FAQ - category.phtml</li><br />
<li>Страница успешно заданного вопроса = post_question.phtml</li><br />
<li>Страница проекта в модуле FAQ - project.phtml</li><br />
<li>Страница вопроса - question.phtml</li><br />
<li>В папках question и category находятся вспомогательные файлы для вывода категорий вопросов и вопросов</li><br />
</ul><br />
====Файловый менеджер====<br />
В папке filemanager находится функционал для работы с файлами на сайте. Здесь имеется единственный шаблон для страницы скачиваемого файла - shared_file.phtml.<br />
====Форум====<br />
В папке forum располагается функционал форума на сайте.<br />
<ul><br />
<li>Конференция форума - conf.phtml</li><br />
<li>Страница сообщения в топике форума - message.phtml</li><br />
<li>Топик форума - topic.phtml</li><br />
<li>В папках message и topic содержатся вспомогательные файлы для вывода сообщений и тем форума.</li><br />
</ul><br />
====Новости====<br />
Весь функционал отображения новостей на сайте находится в папке news.<br />
<ul><br />
<li>Страница новости - item.phtml</li><br />
<li>Лента новостей - rubric.phtml</li><br />
<li>Превью новости в ленте - rubric_item.phtml</li><br />
<li>В папке item находятся вспомогательные файлы для вывода элементов новости.</li><br />
</ul><br />
====Фотоальбом/Фотогалерея====<br />
Функционал фотогалереи на сайте находится в папке photoalbum.<br />
Здесь имеются только два файла:<br />
<ul><br />
<li>Альбом с фотографиями - album.phtml</li><br />
<li>Страница фотографии - photo.phtml</li><br />
<ul><br />
====Поиск====<br />
Функционал вывода данных поиска по сайту расположен в папке search.<br />
<ul><br />
<li>Результаты поиска - result.phtml</li><br />
<li>Страница с результатами поиска - search_do.phtml</li><br />
<ul><br />
====Пользователи====<br />
Функционал вывода данных для пользователя на сайте находится в папке users.<br />
<ul><br />
<li>Подробную информацию о том, за что отвечает каждый файл в этой папке, вы можете получить из комментариев в начале каждого файла.</li><br />
<li>В папке login_do находятся шаблоны для вывода результата попытки входа на сайт</li><br />
<ul><br />
====Опросы====<br />
Вывод опросов на сайте описан в папке vote. Здесь находится<br />
<ul><br />
<li>Вывод блока отзывов о товаре - element_rating.phtml</li><br />
<li>Формы опроса - form.phtml</li><br />
<li>Вывода опроса/его результатов - poll.phtml</li><br />
<li>Результаты опроса - result.phtml</li><br />
<li>Шаблон обработки результата макроса установки рейтинга - setElementRating.phtml</li><br />
<li>Вывод опроса или его результата - show_vote.phtml</li><br />
<ul><br />
====Обратная связь====<br />
Функционал форм обратной связи описан в папке webforms.<br />
<ul><br />
<li>Форма всплывающего окна "Заказать звонок" - callback.phtml</li><br />
<li>Страница формы обратной связи - page.phtml</li><br />
<li>Страница с сообщением об успешно отправленной форме - posted.phtml</li><br />
<li>В папке page находятся вспомогательные файлы для вывода данных форм.</li><br />
</ul><br />
<br />
[[category:Вопросы и уроки разработки сайтов на UMI.CMS]]</div>Alelekovhttps://wiki.umisoft.ru/index.php?title=%D0%9E%D1%87%D0%B8%D1%81%D1%82%D0%BA%D0%B0_%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%D1%87%D0%BD%D0%B8%D0%BA%D0%B0_%D0%9D%D0%B5%D0%B7%D0%B0%D1%80%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BF%D0%BE%D0%BA%D1%83%D0%BF%D0%B0%D1%82%D0%B5%D0%BB%D1%8C_%D0%BF%D0%BE_cron&diff=9273Очистка справочника Незарегистрированный покупатель по cron2019-06-28T09:59:29Z<p>Alelekov: Alelekov переименовал страницу Очистка справочника "Незарегистрированный покупатель" по cron в [[Очистка справочника Незарегистрированный…</p>
<hr />
<div>'''Актуально для версии 20'''<br />
<br />
== Задача ==<br />
Проводить очистку справочника "Незарегистрированный покупатель" при запуске [http://dev.docs.umi-cms.ru/nastrojka_sistemy/cron/ cron].<br/><br />
Задача очищения данного справочника актуальная для тех сайтов, количество посещений на которые достигает нескольких тысяч незарегистрированных пользователей в день, из-за чего данные в справочнике достигают больших объёмов, что сказывается на работе сайта.<br />
<br />
== Решение ==<br />
<br />
В первую очередь, нам необходимо назначить обработчик события запуска cron в файле ~/classes/components/config/custom_events.php (если файла нет - необходимо создать его). Обработчик назначается таким образом:<br />
<source lang="php"><br />
<?php <br />
new umiEventListener('cron', 'config', 'deleteUnregisteredCustomers');<br />
</source><br />
<br />
Затем нам нужно описать функцию, которая будет очищать справочник. В файле ~/classes/components/config/customMacros.php создаём метод, который мы назначили на обработку события запуска cron. В нашем случае это метод deleteUnregisteredCustomers, выглядит он вот так:<br />
<source lang="php"><br />
public function deleteUnregisteredCustomers(iUmiEventPoint $e)<br />
{<br />
if ($e->getMode() == 'process') {<br />
// Получить объекты справочника<br />
$unregisteredCustomersData = umiObjectsCollection::getInstance()->getGuidedItems(<здесь нужно указать идентификатор справочника>);<br />
<br />
// Массив содержит значения вида идентификатор => значение<br />
$ids = array_keys($unregisteredCustomersData);<br />
$objectsCollection = umiObjectsCollection::getInstance();<br />
// Проходимся по всем найденным объектам в справочнике "Незарегистрированный покупатель" и удаляем их<br />
// Тут можно настроить кол-во удаляемых за раз объектов, заменив foreach на for и указав ограничения<br />
foreach($ids as $id)<br />
{<br />
$objectsCollection->delObject($id);<br />
}<br />
}<br />
}<br />
</source><br />
<br />
Обратите внимание, что в методе необходимо указать идентификатор справочника "Незарегистрированный покупатель", а не какого-либо другого, иначе можно удалить другие, возможно, нужные Вам данные другого справочника. Идентификатор справочника Вы можете узнать, открыв справочник "Незарегистрированный покупатель" для просмотра и посмотрев последнее число в адресной строке. В нашем случае это число 88:<br />
<br />
[[Файл:Screenshot_10.png]]<br />
<br />
После всех этих действий справочник "Незарегистрированный покупатель" будет очищаться каждый раз по запуску cron. <br />
<br />
<br />
[[category:Написание кастомных макросов]]</div>Alelekovhttps://wiki.umisoft.ru/index.php?title=%D0%9E%D1%87%D0%B8%D1%81%D1%82%D0%BA%D0%B0_%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%D1%87%D0%BD%D0%B8%D0%BA%D0%B0_%22%D0%9D%D0%B5%D0%B7%D0%B0%D1%80%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BF%D0%BE%D0%BA%D1%83%D0%BF%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%22_%D0%BF%D0%BE_cron&diff=9274Очистка справочника "Незарегистрированный покупатель" по cron2019-06-28T09:59:29Z<p>Alelekov: Alelekov переименовал страницу Очистка справочника "Незарегистрированный покупатель" по cron в [[Очистка справочника Незарегистрированный…</p>
<hr />
<div>#перенаправление [[Очистка справочника Незарегистрированный покупатель по cron]]</div>Alelekovhttps://wiki.umisoft.ru/index.php?title=%D0%92%D1%8B%D0%B2%D0%BE%D0%B4_%D1%81%D0%BF%D0%BE%D1%81%D0%BE%D0%B1%D0%BE%D0%B2_%D0%B4%D0%BE%D1%81%D1%82%D0%B0%D0%B2%D0%BA%D0%B8_%D0%B2_%D0%B7%D0%B0%D0%B2%D0%B8%D1%81%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8_%D0%BE%D1%82_%D0%B4%D0%BE%D0%BC%D0%B5%D0%BD%D0%B0&diff=9271Вывод способов доставки в зависимости от домена2019-06-27T08:39:13Z<p>Alelekov: </p>
<hr />
<div>'''Актуально для версии 20'''<br />
==Задача==<br />
В мультисайтовой системе выводить способы доставки при оформлении заказа в зависимости от домена.<br />
==Решение==<br />
Для любого типа шаблонизаторов подготовительные действия будут одинаковы. <br />
В модуле "Шаблоны данных" необходимо найти тип данных "Способ доставки" и добавить ему поле типа "Ссылка на домен" с идентификатором "domain".<br />
<br />
===В XSLT-шаблонизаторе ===<br />
Для облегчения жизни создадим в файле '''classes/components/custom.php''' следующий метод:<br />
<source lang='php'><br />
public function domain() {<br />
return $_SERVER["HTTP_HOST"];<br />
}<br />
</source><br />
Этот макрос будет просто возвращать текущий домен. Идём модуль "Интернет магазин"и на вкладке "Доставка" редактируем созданное поле "domain" в соответствии с потребностями.<br />
После проделанных подготовительных операций, можно приступить непосредственно к XSLT шаблону. Открываем шаблон в котором выводится список способов доставки и обрамляем вывод способа доставки в условие (в demodizzy данный код находится в файле /xsltTpls/modules/emarket/purchase/delivery.xsl).<br />
<source lang='xml'><br />
<xsl:if test="document('udata://custom/domain')=document(concat('uobject://',@id,'.domen'))/udata/property/value/item/@name " ><br />
<div><br />
<label><br />
<input type="radio" name="delivery-id" value="{@id}"><br />
<xsl:apply-templates select="." mode="delivery-choose-first" /><br />
</input><br />
<xsl:value-of select="@name" /><br />
<br />
<xsl:call-template name="delivery-price" ><br />
<xsl:with-param name="price" select="$delivery-price"/><br />
</xsl:call-template ><br />
</label><br />
</div><br />
</xsl:if><br />
</source><br />
<br />
===В PHP-шаблонизаторе===<br />
В данном случае метод сравнения доменов будет немного сложнее. Всё так же - в файл '''classes/components/custom.php''' добавим следующий код:<br />
<source lang="php"><br />
public function isCurrentDomainDelivery($deliveryId)<br />
{ <br />
$objectsCollection = umiObjectsCollection::getInstance(); <br />
$deliveryObject = $objectsCollection->getObject($deliveryId); <br />
$domains = domainsCollection::getInstance();<br />
<br />
$host = $_SERVER["HTTP_HOST"];<br />
$currentDomainObject = $domains->getDomainByHost($host); <br />
<br />
$deliveryDomainId = $deliveryObject->getValue('domain'); <br />
$deliveryDomainObject = $domains->getDomain($deliveryDomainId); <br />
// Если у доставки не заполнен "Домен" - она доступна для всех доменов<br />
if(!$deliveryDomainObject)<br />
{<br />
return true;<br />
} <br />
<br />
$currentDomain = $currentDomainObject->getHost(); <br />
$deliveryDomain = $deliveryDomainObject->getHost(); <br />
<br />
return $currentDomain === $deliveryDomain;<br />
}<br />
</source><br />
</li><br />
Осталось только отредактировать шаблон вывода способов доставки. Следующие действия делаем на примере шаблона Demomarket.<br />
В файле '''templates/demomarket/php/emarket/delivery/choose/list.phtml''' происходит вывод способов доставки. Добавим в уже имеющийся там код проверку домена, указанного в способе доставки, используя написанный нами метод. Итоговый код в файле будет вот таким:<br />
<source lang="php"><br />
<?php foreach ($deliveryList as $delivery): ?> <br />
<? if ($this->macros('custom', 'isCurrentDomainDelivery', $delivery)): ?><br />
<?php if ($this->isApiShipDelivery($delivery)): ?><br />
<?= $this->render($delivery, 'emarket/delivery/choose/apiship') ?><br />
<?php else: ?> <br />
<?= $this->render($delivery, 'emarket/delivery/choose/item') ?><br />
<?php endif; ?><br />
<? endif; ?><br />
<?php endforeach; ?><br />
</source><br />
<br />
== Итог ==<br />
Теперь при оформлении доставки, на этапе выбора способа доставки будут показаны те способы, поле "domain" которых соответствует текущему домену.<br />
[[Категория:Верстка в XSLT]][[Категория:Написание кастомных макросов]][[Категория:Модуль Интернет магазин]]</div>Alelekovhttps://wiki.umisoft.ru/index.php?title=%D0%92%D1%8B%D0%B2%D0%BE%D0%B4_%D1%81%D0%BF%D0%BE%D1%81%D0%BE%D0%B1%D0%BE%D0%B2_%D0%B4%D0%BE%D1%81%D1%82%D0%B0%D0%B2%D0%BA%D0%B8_%D0%B2_%D0%B7%D0%B0%D0%B2%D0%B8%D1%81%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8_%D0%BE%D1%82_%D0%B4%D0%BE%D0%BC%D0%B5%D0%BD%D0%B0&diff=9270Вывод способов доставки в зависимости от домена2019-06-27T08:31:22Z<p>Alelekov: </p>
<hr />
<div>'''Актуально для версии 20'''<br />
==Задача==<br />
В мультисайтовой системе выводить способы доставки при оформлении заказа в зависимости от домена.<br />
==Решение==<br />
Для любого типа шаблонизаторов подготовительные действия будут одинаковы. <br />
В модуле "Шаблоны данных" необходимо найти тип данных "Способ доставки" и добавить ему поле типа "Ссылка на домен" с идентификатором "domain".<br />
<br />
===В XSLT-шаблонизаторе ===<br />
Для облегчения жизни создадим в файле '''classes/components/custom.php''' следующий метод:<br />
<source lang='php'><br />
public function domain() {<br />
return $_SERVER["HTTP_HOST"];<br />
}<br />
</source><br />
Этот макрос будет просто возвращать текущий домен. Идём модуль "Интернет магазин"и на вкладке "Доставка" редактируем созданное поле "domain" в соответствии с потребностями.<br />
После проделанных подготовительных операций, можно приступить непосредственно к XSLT шаблону. Открываем шаблон в котором выводится список способов доставки и обрамляем вывод способа доставки в условие (в demodizzy данный код находится в файле /xsltTpls/modules/emarket/purchase/delivery.xsl).<br />
<source lang='xml'><br />
<xsl:if test="document('udata://custom/domain')=document(concat('uobject://',@id,'.domen'))/udata/property/value/item/@name " ><br />
<div><br />
<label><br />
<input type="radio" name="delivery-id" value="{@id}"><br />
<xsl:apply-templates select="." mode="delivery-choose-first" /><br />
</input><br />
<xsl:value-of select="@name" /><br />
<br />
<xsl:call-template name="delivery-price" ><br />
<xsl:with-param name="price" select="$delivery-price"/><br />
</xsl:call-template ><br />
</label><br />
</div><br />
</xsl:if><br />
</source><br />
<br />
===В PHP-шаблонизаторе===<br />
В данном случае метод сравнения доменов будет немного сложнее. Всё так же - в файл '''classes/components/custom.php''' добавим следующий код:<br />
<source lang="php"><br />
public function isCurrentDomainDelivery($deliveryId)<br />
{ <br />
$objectsCollection = umiObjectsCollection::getInstance(); <br />
$deliveryObject = $objectsCollection->getObject($deliveryId); <br />
$domains = domainsCollection::getInstance();<br />
<br />
$host = $_SERVER["HTTP_HOST"];<br />
$currentDomainObject = $domains->getDomainByHost($host); <br />
$currentDomain = $currentDomainObject->getHost(); <br />
<br />
$deliveryDomainId = $deliveryObject->getValue('domain');<br />
$object = $objectsCollection->getObject($deliveryDomainId);<br />
$deliveryDomain = $object->name;<br />
<br />
return $currentDomain === $deliveryDomain;<br />
}<br />
</source><br />
</li><br />
Осталось только отредактировать шаблон вывода способов доставки. Следующие действия делаем на примере шаблона Demomarket.<br />
В файле '''templates/demomarket/php/emarket/delivery/choose/list.phtml''' происходит вывод способов доставки. Добавим в уже имеющийся там код проверку домена, указанного в способе доставки, используя написанный нами метод. Итоговый код в файле будет вот таким:<br />
<source lang="php"><br />
<?php foreach ($deliveryList as $delivery): ?> <br />
<? if ($this->macros('custom', 'isCurrentDomainDelivery', $delivery)): ?><br />
<?php if ($this->isApiShipDelivery($delivery)): ?><br />
<?= $this->render($delivery, 'emarket/delivery/choose/apiship') ?><br />
<?php else: ?> <br />
<?= $this->render($delivery, 'emarket/delivery/choose/item') ?><br />
<?php endif; ?><br />
<? endif; ?><br />
<?php endforeach; ?><br />
</source><br />
<br />
== Итог ==<br />
Теперь при оформлении доставки, на этапе выбора способа доставки будут показаны те способы, поле "domain" которых соответствует текущему домену.<br />
[[Категория:Верстка в XSLT]][[Категория:Написание кастомных макросов]][[Категория:Модуль Интернет магазин]]</div>Alelekovhttps://wiki.umisoft.ru/index.php?title=%D0%92%D1%8B%D0%B2%D0%BE%D0%B4_%D1%81%D0%BF%D0%BE%D1%81%D0%BE%D0%B1%D0%BE%D0%B2_%D0%B4%D0%BE%D1%81%D1%82%D0%B0%D0%B2%D0%BA%D0%B8_%D0%B2_%D0%B7%D0%B0%D0%B2%D0%B8%D1%81%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8_%D0%BE%D1%82_%D0%B4%D0%BE%D0%BC%D0%B5%D0%BD%D0%B0&diff=9269Вывод способов доставки в зависимости от домена2019-06-26T16:08:42Z<p>Alelekov: /* В PHP-шаблонизаторе */</p>
<hr />
<div>'''Актуально для версии 20'''<br />
==Задача==<br />
В мультисайтовой системе выводить способы доставки при оформлении заказа в зависимости от домена.<br />
==Решение==<br />
Для любого типа шаблонизаторов подготовительные действия будут одинаковы. <br />
<ol><br />
<li>В модуле "Шаблоны данных" создаём справочник "Домены для доставки", в котором указываем все домены в нашей системе.</li><br />
<li>В модуле "Шаблоны данных" находим тип "Способ доставки" и добавляем ему поле типа "Выпадающий список" с идентификатором "domain".Устанавливаем для поля справочник, который мы создали в предыдущем пункте.</li><br />
<li>Заполняем у всех способов доставки появившееся поле</li><br />
</ol><br />
<br />
===В XSLT-шаблонизаторе ===<br />
Для облегчения жизни создадим в файле '''classes/components/custom.php''' следующий метод:<br />
<source lang='php'><br />
public function domain() {<br />
return $_SERVER["HTTP_HOST"];<br />
}<br />
</source><br />
Этот макрос будет просто возвращать текущий домен. Идём модуль "Интернет магазин"и на вкладке "Доставка" редактируем созданное поле "domain" в соответствии с потребностями.<br />
После проделанных подготовительных операций, можно приступить непосредственно к XSLT шаблону. Открываем шаблон в котором выводится список способов доставки и обрамляем вывод способа доставки в условие (в demodizzy данный код находится в файле /xsltTpls/modules/emarket/purchase/delivery.xsl).<br />
<source lang='xml'><br />
<xsl:if test="document('udata://custom/domain')=document(concat('uobject://',@id,'.domen'))/udata/property/value/item/@name " ><br />
<div><br />
<label><br />
<input type="radio" name="delivery-id" value="{@id}"><br />
<xsl:apply-templates select="." mode="delivery-choose-first" /><br />
</input><br />
<xsl:value-of select="@name" /><br />
<br />
<xsl:call-template name="delivery-price" ><br />
<xsl:with-param name="price" select="$delivery-price"/><br />
</xsl:call-template ><br />
</label><br />
</div><br />
</xsl:if><br />
</source><br />
<br />
===В PHP-шаблонизаторе===<br />
В данном случае метод сравнения доменов будет немного сложнее. Всё так же - в файл '''classes/components/custom.php''' добавим следующий код:<br />
<source lang="php"><br />
public function isCurrentDomainDelivery($deliveryId)<br />
{ <br />
$objectsCollection = umiObjectsCollection::getInstance(); <br />
$deliveryObject = $objectsCollection->getObject($deliveryId); <br />
$domains = domainsCollection::getInstance();<br />
<br />
$host = $_SERVER["HTTP_HOST"];<br />
$currentDomainObject = $domains->getDomainByHost($host); <br />
$currentDomain = $currentDomainObject->getHost(); <br />
<br />
$deliveryDomainId = $deliveryObject->getValue('domain');<br />
$object = $objectsCollection->getObject($deliveryDomainId);<br />
$deliveryDomain = $object->name;<br />
<br />
return $currentDomain === $deliveryDomain;<br />
}<br />
</source><br />
</li><br />
Осталось только отредактировать шаблон вывода способов доставки. Следующие действия делаем на примере шаблона Demomarket.<br />
В файле '''templates/demomarket/php/emarket/delivery/choose/list.phtml''' происходит вывод способов доставки. Добавим в уже имеющийся там код проверку домена, указанного в способе доставки, используя написанный нами метод. Итоговый код в файле будет вот таким:<br />
<source lang="php"><br />
<?php foreach ($deliveryList as $delivery): ?> <br />
<? if ($this->macros('custom', 'isCurrentDomainDelivery', $delivery)): ?><br />
<?php if ($this->isApiShipDelivery($delivery)): ?><br />
<?= $this->render($delivery, 'emarket/delivery/choose/apiship') ?><br />
<?php else: ?> <br />
<?= $this->render($delivery, 'emarket/delivery/choose/item') ?><br />
<?php endif; ?><br />
<? endif; ?><br />
<?php endforeach; ?><br />
</source><br />
<br />
== Итог ==<br />
Теперь при оформлении доставки, на этапе выбора способа доставки будут показаны те способы, поле "domain" которых соответствует текущему домену.<br />
[[Категория:Верстка в XSLT]][[Категория:Написание кастомных макросов]][[Категория:Модуль Интернет магазин]]</div>Alelekovhttps://wiki.umisoft.ru/index.php?title=%D0%92%D1%8B%D0%B2%D0%BE%D0%B4_%D1%81%D0%BF%D0%BE%D1%81%D0%BE%D0%B1%D0%BE%D0%B2_%D0%B4%D0%BE%D1%81%D1%82%D0%B0%D0%B2%D0%BA%D0%B8_%D0%B2_%D0%B7%D0%B0%D0%B2%D0%B8%D1%81%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8_%D0%BE%D1%82_%D0%B4%D0%BE%D0%BC%D0%B5%D0%BD%D0%B0&diff=9268Вывод способов доставки в зависимости от домена2019-06-26T16:07:53Z<p>Alelekov: /* Решение */</p>
<hr />
<div>'''Актуально для версии 20'''<br />
==Задача==<br />
В мультисайтовой системе выводить способы доставки при оформлении заказа в зависимости от домена.<br />
==Решение==<br />
Для любого типа шаблонизаторов подготовительные действия будут одинаковы. <br />
<ol><br />
<li>В модуле "Шаблоны данных" создаём справочник "Домены для доставки", в котором указываем все домены в нашей системе.</li><br />
<li>В модуле "Шаблоны данных" находим тип "Способ доставки" и добавляем ему поле типа "Выпадающий список" с идентификатором "domain".Устанавливаем для поля справочник, который мы создали в предыдущем пункте.</li><br />
<li>Заполняем у всех способов доставки появившееся поле</li><br />
</ol><br />
<br />
===В XSLT-шаблонизаторе ===<br />
Для облегчения жизни создадим в файле '''classes/components/custom.php''' следующий метод:<br />
<source lang='php'><br />
public function domain() {<br />
return $_SERVER["HTTP_HOST"];<br />
}<br />
</source><br />
Этот макрос будет просто возвращать текущий домен. Идём модуль "Интернет магазин"и на вкладке "Доставка" редактируем созданное поле "domain" в соответствии с потребностями.<br />
После проделанных подготовительных операций, можно приступить непосредственно к XSLT шаблону. Открываем шаблон в котором выводится список способов доставки и обрамляем вывод способа доставки в условие (в demodizzy данный код находится в файле /xsltTpls/modules/emarket/purchase/delivery.xsl).<br />
<source lang='xml'><br />
<xsl:if test="document('udata://custom/domain')=document(concat('uobject://',@id,'.domen'))/udata/property/value/item/@name " ><br />
<div><br />
<label><br />
<input type="radio" name="delivery-id" value="{@id}"><br />
<xsl:apply-templates select="." mode="delivery-choose-first" /><br />
</input><br />
<xsl:value-of select="@name" /><br />
<br />
<xsl:call-template name="delivery-price" ><br />
<xsl:with-param name="price" select="$delivery-price"/><br />
</xsl:call-template ><br />
</label><br />
</div><br />
</xsl:if><br />
</source><br />
<br />
===В PHP-шаблонизаторе===<br />
В данном случае метод сравнения доменов будет немного сложнее. Всё так же - в файл '''classes/components/custom.php''' добавим следующий код:<br />
<source lang="php"><br />
function isCurrentDomainDelivery($delivery)<br />
{ <br />
$objectsCollection = umiObjectsCollection::getInstance();<br />
$delivery = $objectsCollection->getObject($delivery['id']); <br />
<br />
$domains = domainsCollection::getInstance();<br />
<br />
$host = $_SERVER["HTTP_HOST"];<br />
$currentDomainObject = $domains->getDomainByHost($host); <br />
$currentDomain = $currentDomainObject->getHost(); <br />
<br />
$deliveryDomainId = $delivery->getValue('domain');<br />
$object = $objectsCollection->getObject($deliveryDomainId);<br />
$deliveryDomain = $object->name;<br />
<br />
return $currentDomain === $deliveryDomain;<br />
}<br />
</source><br />
</li><br />
Осталось только отредактировать шаблон вывода способов доставки. Следующие действия делаем на примере шаблона Demomarket.<br />
В файле '''templates/demomarket/php/emarket/delivery/choose/list.phtml''' происходит вывод способов доставки. Добавим в уже имеющийся там код проверку домена, указанного в способе доставки, используя написанный нами метод. Итоговый код в файле будет вот таким:<br />
<source lang="php"><br />
<?php foreach ($deliveryList as $delivery): ?> <br />
<? if ($this->macros('custom', 'isCurrentDomainDelivery', $delivery)): ?><br />
<?php if ($this->isApiShipDelivery($delivery)): ?><br />
<?= $this->render($delivery, 'emarket/delivery/choose/apiship') ?><br />
<?php else: ?> <br />
<?= $this->render($delivery, 'emarket/delivery/choose/item') ?><br />
<?php endif; ?><br />
<? endif; ?><br />
<?php endforeach; ?><br />
</source><br />
<br />
== Итог ==<br />
Теперь при оформлении доставки, на этапе выбора способа доставки будут показаны те способы, поле "domain" которых соответствует текущему домену.<br />
[[Категория:Верстка в XSLT]][[Категория:Написание кастомных макросов]][[Категория:Модуль Интернет магазин]]</div>Alelekovhttps://wiki.umisoft.ru/index.php?title=%D0%92%D1%8B%D0%B2%D0%BE%D0%B4_%D1%81%D0%BF%D0%BE%D1%81%D0%BE%D0%B1%D0%BE%D0%B2_%D0%B4%D0%BE%D1%81%D1%82%D0%B0%D0%B2%D0%BA%D0%B8_%D0%B2_%D0%B7%D0%B0%D0%B2%D0%B8%D1%81%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8_%D0%BE%D1%82_%D0%B4%D0%BE%D0%BC%D0%B5%D0%BD%D0%B0&diff=9267Вывод способов доставки в зависимости от домена2019-06-26T16:07:03Z<p>Alelekov: </p>
<hr />
<div>'''Актуально для версии 20'''<br />
==Задача==<br />
В мультисайтовой системе выводить способы доставки при оформлении заказа в зависимости от домена.<br />
==Решение==<br />
Для любого типа шаблонизаторов подготовительные действия будут одинаковы. <br />
<ol><br />
<li>В модуле "Шаблоны данных" создаём справочник "Домены для доставки", в котором указываем все домены в нашей системе.</li><br />
<li>В модуле "Шаблоны данных" находим тип "Способ доставки" и добавляем ему поле типа "Выпадающий список" с идентификатором "domain".Устанавливаем для поля справочник, который мы создали в предыдущем пункте.</li><br />
<li>Заполнить у всех способов доставки появившееся поле</li><br />
</ol><br />
<br />
===В XSLT-шаблонизаторе ===<br />
Для облегчения жизни создадим в файле '''classes/components/custom.php''' следующий метод:<br />
<source lang='php'><br />
public function domain() {<br />
return $_SERVER["HTTP_HOST"];<br />
}<br />
</source><br />
Этот макрос будет просто возвращать текущий домен. Идём модуль "Интернет магазин"и на вкладке "Доставка" редактируем созданное поле "domain" в соответствии с потребностями.<br />
После проделанных подготовительных операций, можно приступить непосредственно к XSLT шаблону. Открываем шаблон в котором выводится список способов доставки и обрамляем вывод способа доставки в условие (в demodizzy данный код находится в файле /xsltTpls/modules/emarket/purchase/delivery.xsl).<br />
<source lang='xml'><br />
<xsl:if test="document('udata://custom/domain')=document(concat('uobject://',@id,'.domen'))/udata/property/value/item/@name " ><br />
<div><br />
<label><br />
<input type="radio" name="delivery-id" value="{@id}"><br />
<xsl:apply-templates select="." mode="delivery-choose-first" /><br />
</input><br />
<xsl:value-of select="@name" /><br />
<br />
<xsl:call-template name="delivery-price" ><br />
<xsl:with-param name="price" select="$delivery-price"/><br />
</xsl:call-template ><br />
</label><br />
</div><br />
</xsl:if><br />
</source><br />
<br />
===В PHP-шаблонизаторе===<br />
В данном случае метод сравнения доменов будет немного сложнее. Всё так же - в файл '''classes/components/custom.php''' добавим следующий код:<br />
<source lang="php"><br />
function isCurrentDomainDelivery($delivery)<br />
{ <br />
$objectsCollection = umiObjectsCollection::getInstance();<br />
$delivery = $objectsCollection->getObject($delivery['id']); <br />
<br />
$domains = domainsCollection::getInstance();<br />
<br />
$host = $_SERVER["HTTP_HOST"];<br />
$currentDomainObject = $domains->getDomainByHost($host); <br />
$currentDomain = $currentDomainObject->getHost(); <br />
<br />
$deliveryDomainId = $delivery->getValue('domain');<br />
$object = $objectsCollection->getObject($deliveryDomainId);<br />
$deliveryDomain = $object->name;<br />
<br />
return $currentDomain === $deliveryDomain;<br />
}<br />
</source><br />
</li><br />
Осталось только отредактировать шаблон вывода способов доставки. Следующие действия делаем на примере шаблона Demomarket.<br />
В файле '''templates/demomarket/php/emarket/delivery/choose/list.phtml''' происходит вывод способов доставки. Добавим в уже имеющийся там код проверку домена, указанного в способе доставки, используя написанный нами метод. Итоговый код в файле будет вот таким:<br />
<source lang="php"><br />
<?php foreach ($deliveryList as $delivery): ?> <br />
<? if ($this->macros('custom', 'isCurrentDomainDelivery', $delivery)): ?><br />
<?php if ($this->isApiShipDelivery($delivery)): ?><br />
<?= $this->render($delivery, 'emarket/delivery/choose/apiship') ?><br />
<?php else: ?> <br />
<?= $this->render($delivery, 'emarket/delivery/choose/item') ?><br />
<?php endif; ?><br />
<? endif; ?><br />
<?php endforeach; ?><br />
</source><br />
<br />
== Итог ==<br />
Теперь при оформлении доставки, на этапе выбора способа доставки будут показаны те способы, поле "domain" которых соответствует текущему домену.<br />
[[Категория:Верстка в XSLT]][[Категория:Написание кастомных макросов]][[Категория:Модуль Интернет магазин]]</div>Alelekovhttps://wiki.umisoft.ru/index.php?title=%D0%92%D1%8B%D0%B2%D0%BE%D0%B4_%D1%81%D0%BF%D0%BE%D1%81%D0%BE%D0%B1%D0%BE%D0%B2_%D0%B4%D0%BE%D1%81%D1%82%D0%B0%D0%B2%D0%BA%D0%B8_%D0%B2_%D0%B7%D0%B0%D0%B2%D0%B8%D1%81%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8_%D0%BE%D1%82_%D0%B4%D0%BE%D0%BC%D0%B5%D0%BD%D0%B0&diff=9266Вывод способов доставки в зависимости от домена2019-06-26T16:01:47Z<p>Alelekov: </p>
<hr />
<div>'''Актуально для версии 20'''<br />
==Задача==<br />
В мультисайтовой системе выводить способы доставки при оформлении заказа в зависимости от домена.<br />
==Решение==<br />
Для любого типа шаблонизаторов подготовительные действия будут одинаковы. <br />
<ol><br />
<li>В модуле "Шаблоны данных" создаём справочник "Домены для доставки", в котором указываем все домены в нашей системе.</li><br />
<li>В модуле "Шаблоны данных" находим тип "Способ доставки" и добавляем ему поле типа "Выпадающий список" с идентификатором "domain".Устанавливаем для поля справочник, который мы создали в предыдущем пункте.</li><br />
<li>Заполнить у всех способов доставки появившееся поле</li><br />
</ol><br />
<br />
===В XSLT-шаблонизаторе ===<br />
Для облегчения жизни создадим в файле '''classes/components/custom.php''' следующий метод:<br />
<source lang='php'><br />
public function domain() {<br />
return $_SERVER["HTTP_HOST"];<br />
}<br />
</source><br />
Этот макрос будет просто возвращать текущий домен. Идём модуль "Интернет магазин"и на вкладке "Доставка" редактируем созданное поле "domain" в соответствии с потребностями.<br />
После проделанных подготовительных операций, можно приступить непосредственно к XSLT шаблону. Открываем шаблон в котором выводится список способов доставки и обрамляем вывод способа доставки в условие (в demodizzy данный код находится в файле /xsltTpls/modules/emarket/purchase/delivery.xsl).<br />
<source lang='xml'><br />
<xsl:if test="document('udata://custom/domain')=document(concat('uobject://',@id,'.domen'))/udata/property/value/item/@name " ><br />
<div><br />
<label><br />
<input type="radio" name="delivery-id" value="{@id}"><br />
<xsl:apply-templates select="." mode="delivery-choose-first" /><br />
</input><br />
<xsl:value-of select="@name" /><br />
<br />
<xsl:call-template name="delivery-price" ><br />
<xsl:with-param name="price" select="$delivery-price"/><br />
</xsl:call-template ><br />
</label><br />
</div><br />
</xsl:if><br />
</source><br />
<br />
===PHP-шаблонизаторе===<br />
В данном случае метод сравнения доменов будет немного сложнее. Всё так же - в файл '''classes/components/custom.php''' добавим следующий код:<br />
<source lang="php"><br />
function isCurrentDomainDelivery($delivery)<br />
{ <br />
$objectsCollection = umiObjectsCollection::getInstance();<br />
$delivery = $objectsCollection->getObject($delivery['id']); <br />
<br />
$domains = domainsCollection::getInstance();<br />
<br />
$host = $_SERVER["HTTP_HOST"];<br />
$currentDomainObject = $domains->getDomainByHost($host); <br />
$currentDomain = $currentDomainObject->getHost(); <br />
<br />
$deliveryDomainId = $delivery->getValue('domain');<br />
$object = $objectsCollection->getObject($deliveryDomainId);<br />
$deliveryDomain = $object->name;<br />
<br />
return $currentDomain === $deliveryDomain;<br />
}<br />
</source><br />
</li><br />
Осталось только отредактировать шаблон вывода способов доставки. Следующие действия делаем на примере шаблона Demomarket.<br />
В файле '''templates/demomarket/php/emarket/delivery/choose/list.phtml''' происходит вывод способов доставки. Добавим в уже имеющийся там код проверку домена, указанного в способе доставки, используя написанный нами метод. Итоговый код в файле будет вот таким:<br />
<source lang="php"><br />
<?php foreach ($deliveryList as $delivery): ?> <br />
<? if ($this->macros('custom', 'isCurrentDomainDelivery', $delivery)): ?><br />
<?php if ($this->isApiShipDelivery($delivery)): ?><br />
<?= $this->render($delivery, 'emarket/delivery/choose/apiship') ?><br />
<?php else: ?> <br />
<?= $this->render($delivery, 'emarket/delivery/choose/item') ?><br />
<?php endif; ?><br />
<? endif; ?><br />
<?php endforeach; ?><br />
</source><br />
<br />
== Итог ==<br />
Теперь при оформлении доставки, на этапе выбора способа доставки будут показаны те способы, поле "domain" которых соответствует текущему домену.<br />
[[Категория:Верстка в XSLT]][[Категория:Написание кастомных макросов]][[Категория:Модуль Интернет магазин]]</div>Alelekovhttps://wiki.umisoft.ru/index.php?title=%D0%9D%D0%B5_%D0%BF%D1%80%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%B5%D1%82%D1%81%D1%8F_%D0%BB%D0%B8%D1%86%D0%B5%D0%BD%D0%B7%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BA%D0%BB%D1%8E%D1%87&diff=9264Не принимается лицензионный ключ2019-06-25T12:06:08Z<p>Alelekov: </p>
<hr />
<div>'''Актуально для версии 20.'''<br />
<br />
Скорее всего у вас поменялся IP-адрес (например, вы сменили хостинг-провайдера или сервер) или домен, а ключ как раз к ним привязан. <br />
<br />
В данном случае, необходимо выполнить [http://wiki.umisoft.ru/Переактивация переактивацию] системы.<br />
<br />
Если переактивация системы не решит проблему - необходимо будет обратиться к нам со страницы поддержки (http://www.umi-cms.ru/support/) с просьбой снять привязку лицензионного ключа и активировать его на домене с новым ip, с объяснением причины сброса привязки.<br />
<br />
Если привязка сброшена, но Ваш лицензионный ключ не принимается — попробуйте выполнить следующие действия:<br />
<br /><br /><br />
1. '''Очистите''' содержимое папки '''кэш'''<br />
* Папка ''"~/sys-temp/runtime-cache/"'' - для системы версии от 2.8.X.<br />
* Папка ''"~/cache/"'' или содержимое в файле ''"~/cache/engine/"'' - для системы версии 2.7.X или ниже.<br />
<br /><br />
2. '''Проставьте права''' "755" на все директории, находящиеся в корне.<br />
<br /><br /><br />
3. Проверьте таблицу '''cms3_domains''' (должен быть записан домен, где вводится ключ) в БД.<br />
<br /><br /><br />
4. Установите на папки "'''/errors/'''" и "'''/sys-temp/runtime-cache/'''" права '''777''' или '''755''' (рекурсивно).<br />
<br /><br /><br />
5. '''Удалите''' значение (val) записи с именем (var) 'keycode', в таблице 'cms_reg'.<br />
<br /><br /><br />
6. Если версия системы 2.8.X попробуйте '''отключить кэш''' в файле ''"config.ini"''. Оставьте в строке engine пустые кавычки:<br />
<source lang="ini"><br />
[cache]<br />
engine = ""<br />
</source><br />
7. При ошибке о невозможности загрузить '''тесты хостинга''', проверьте есть ли еще '''свободное место''' у Вас на FTP, если есть, то попробуйте 4 пункт.<br />
<br />
8. Если сайт работает по защищенному протоколу, в настройках браузера перейти на '''незащищенное соединение''' (актуально для некоторых версий).<br />
<br />
9. Проверить соответствие '''версии PHP системным требованиям'''.<br />
<br />
10. Если доменный ключ удален, а сайт продолжает работать и не появляется форма для ввода ключа, форму можно вызвать напрямую: адрес_сайта/errors/invalid_license.html <br />
<br />
* Перед каждой новой попыткой ввода ключа рекомендуем очищать папку кэш (1 пункт).<br />
[[category:Лицензионные ключи]][[Категория:Решение проблем и ошибок]]</div>Alelekovhttps://wiki.umisoft.ru/index.php?title=%D0%9F%D1%80%D0%BE%D0%B1%D0%BB%D0%B5%D0%BC%D0%B0_%D0%BF%D0%BE%D0%B2%D1%82%D0%BE%D1%80%D0%BD%D0%BE%D0%B9_%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B8:_%D0%BA%D0%BB%D1%8E%D1%87_%D1%83%D0%B6%D0%B5_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD&diff=9263Проблема повторной установки: ключ уже использован2019-06-25T11:57:42Z<p>Alelekov: </p>
<hr />
<div>'''Актуально для версии 20.'''<br />
<br />
Зачастую, достаточно будет просто провести [http://wiki.umisoft.ru/Переактивация переактивацию] системы.<br />
<br />
Если переактивация системы не помогает - необходимо обратиться в Службу Заботы или коммерческий отдел с просьбой сбросить привязку ключа к текущим домену и ip-адресу.<br />
После сброса привязки можно будет повторить установку.<br />
<br />
[[Категория:Решение проблем и ошибок]][[Категория:Лицензионные ключи]][[Категория:Вопросы установки настройки и переноса]]</div>Alelekovhttps://wiki.umisoft.ru/index.php?title=%D0%9F%D1%80%D0%BE%D0%B1%D0%BB%D0%B5%D0%BC%D0%B0_%D0%BF%D0%BE%D0%B2%D1%82%D0%BE%D1%80%D0%BD%D0%BE%D0%B9_%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B8:_%D0%BA%D0%BB%D1%8E%D1%87_%D1%83%D0%B6%D0%B5_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD&diff=9262Проблема повторной установки: ключ уже использован2019-06-25T11:57:07Z<p>Alelekov: </p>
<hr />
<div>'''Актуально для версии 20.'''<br />
<br />
Зачастую, достаточно будет просто провести [http://wiki.umisoft.ru/Переактивация переактивацию] системы.<br />
Если переактивация системы не помогает - необходимо обратиться в Службу Заботы или коммерческий отдел с просьбой сбросить привязку ключа к текущим домену и ip-адресу.<br />
После сброса привязки можно будет повторить установку.<br />
<br />
[[Категория:Решение проблем и ошибок]][[Категория:Лицензионные ключи]][[Категория:Вопросы установки настройки и переноса]]</div>Alelekovhttps://wiki.umisoft.ru/index.php?title=%D0%9E%D1%88%D0%B8%D0%B1%D0%BA%D0%B0:_%D0%9D%D0%B5%D0%B4%D0%BE%D1%81%D1%82%D0%B0%D1%82%D0%BE%D1%87%D0%BD%D0%BE_%D0%BF%D1%80%D0%B0%D0%B2_%D0%B4%D0%BB%D1%8F_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%8B_%D1%81_%D1%8D%D1%82%D0%B8%D0%BC_%D0%B4%D0%BE%D0%BC%D0%B5%D0%BD%D0%BE%D0%BC&diff=9260Ошибка: Недостаточно прав для работы с этим доменом2019-06-24T13:18:15Z<p>Alelekov: Alelekov переименовал страницу Ошибка "Недостаточно прав для работы с этим доменом" в Ошибка: Недостаточно прав для работы с этим доменом…</p>
<hr />
<div>== Описание ==<br />
При попытке редактирования данных в админ. панели может возникнуть ошибка "Недостаточно прав для работы с этим доменом".<br />
<br />
== Решение == <br />
Данная ошибка возникает потому, что вход в админ. панель был произведён не с основного домена. В таком случае, необходимо проверить следующие пункты.<br />
=== Домен с www и без www - разные домены ===<br />
Допустим, при активации лицензии вы работали на домене mysite.ru - он и является вашим основным доменом, войдя в админ. панель с которого Вы не имеете ограничений на редактирование системных данных. Домен www.mysite.ru не является основным доменом системы, из-за чего, зайдя в админ. панель с этого адреса, мы и получаем эту ошибку. В таком случае можно либо зайти на сайт с основного домена, либо, если вы хотите чтобы основным доменом был домен с www - провести [http://wiki.umisoft.ru/Переактивация переактивацию] системы на этот домен.<br />
<br />
=== Было изменено доменное имя сайта===<br />
В таком случае решение проблемы будет аналогичным предыдущему пункту - нужно провести [http://wiki.umisoft.ru/Переактивация переактивацию] системы.<br />
<br />
=== Основной домен в базе данных не соответствует домену, привязанному к лицензии ===<br />
Такая ситуация возможна при создании копии сайта для разработки, когда мы копируем базу данных с основного сайта. Т.к мы делали копию базы данных, там остались данные о нашем прошлом домене. В таком случае, нам необходимо перейти в таблицу cms3_domains и заменить указанный в столбце host домен на наш текущий домен, на котором мы планируем вести разработку.<br />
<br />
[[category:Решение проблем и ошибок]]</div>Alelekovhttps://wiki.umisoft.ru/index.php?title=%D0%9E%D1%88%D0%B8%D0%B1%D0%BA%D0%B0_%22%D0%9D%D0%B5%D0%B4%D0%BE%D1%81%D1%82%D0%B0%D1%82%D0%BE%D1%87%D0%BD%D0%BE_%D0%BF%D1%80%D0%B0%D0%B2_%D0%B4%D0%BB%D1%8F_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%8B_%D1%81_%D1%8D%D1%82%D0%B8%D0%BC_%D0%B4%D0%BE%D0%BC%D0%B5%D0%BD%D0%BE%D0%BC%22&diff=9261Ошибка "Недостаточно прав для работы с этим доменом"2019-06-24T13:18:15Z<p>Alelekov: Alelekov переименовал страницу Ошибка "Недостаточно прав для работы с этим доменом" в Ошибка: Недостаточно прав для работы с этим доменом…</p>
<hr />
<div>#перенаправление [[Ошибка: Недостаточно прав для работы с этим доменом]]</div>Alelekovhttps://wiki.umisoft.ru/index.php?title=%D0%9E%D1%88%D0%B8%D0%B1%D0%BA%D0%B0:_%D0%9D%D0%B5%D0%B4%D0%BE%D1%81%D1%82%D0%B0%D1%82%D0%BE%D1%87%D0%BD%D0%BE_%D0%BF%D1%80%D0%B0%D0%B2_%D0%B4%D0%BB%D1%8F_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%8B_%D1%81_%D1%8D%D1%82%D0%B8%D0%BC_%D0%B4%D0%BE%D0%BC%D0%B5%D0%BD%D0%BE%D0%BC&diff=9259Ошибка: Недостаточно прав для работы с этим доменом2019-06-19T16:52:50Z<p>Alelekov: </p>
<hr />
<div>== Описание ==<br />
При попытке редактирования данных в админ. панели может возникнуть ошибка "Недостаточно прав для работы с этим доменом".<br />
<br />
== Решение == <br />
Данная ошибка возникает потому, что вход в админ. панель был произведён не с основного домена. В таком случае, необходимо проверить следующие пункты.<br />
=== Домен с www и без www - разные домены ===<br />
Допустим, при активации лицензии вы работали на домене mysite.ru - он и является вашим основным доменом, войдя в админ. панель с которого Вы не имеете ограничений на редактирование системных данных. Домен www.mysite.ru не является основным доменом системы, из-за чего, зайдя в админ. панель с этого адреса, мы и получаем эту ошибку. В таком случае можно либо зайти на сайт с основного домена, либо, если вы хотите чтобы основным доменом был домен с www - провести [http://wiki.umisoft.ru/Переактивация переактивацию] системы на этот домен.<br />
<br />
=== Было изменено доменное имя сайта===<br />
В таком случае решение проблемы будет аналогичным предыдущему пункту - нужно провести [http://wiki.umisoft.ru/Переактивация переактивацию] системы.<br />
<br />
=== Основной домен в базе данных не соответствует домену, привязанному к лицензии ===<br />
Такая ситуация возможна при создании копии сайта для разработки, когда мы копируем базу данных с основного сайта. Т.к мы делали копию базы данных, там остались данные о нашем прошлом домене. В таком случае, нам необходимо перейти в таблицу cms3_domains и заменить указанный в столбце host домен на наш текущий домен, на котором мы планируем вести разработку.<br />
<br />
[[category:Решение проблем и ошибок]]</div>Alelekovhttps://wiki.umisoft.ru/index.php?title=%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BA%D0%BE%D0%BF%D0%B8%D0%B8_%D1%81%D0%B0%D0%B9%D1%82%D0%B0_%D0%B4%D0%BB%D1%8F_%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B8&diff=9258Создание копии сайта для разработки2019-06-19T15:34:57Z<p>Alelekov: </p>
<hr />
<div>== Задача ==<br />
Необходимо провести какие-либо отладочные или иные работы на тестовом сайте, при этом основной сайт должен оставаться в рабочем состоянии.<br />
== Решение ==<br />
Для создания тестовой копии сайта Вы можете обратиться в техническую поддержку хостинга. Данная статья будет полезна вам в том случае, если вы хотите создать копию самостоятельно или просто понимать алгоритм действий в таких случаях.<br />
=== Копируем файлы сайта и базы данных ===<br />
Для начала необходимо создать саму копию сайта. Для этого мы создаём резервную копию файлов сайта средствами хостинга или же просто копируем все имеющиеся файлы, которые относятся к Вашему сайту и UMI.CMS, с хостинга. Вместе с этим, чтобы на тестовом сайте были все необходимые нам данные - мы создаём дамп базы данных и сохраняем его в формате sql. Сделать это можно с помощью утилиты [https://www.adminer.org/ adminer] или с помощью средств хостинга. Обычно для работы с базой данных на хостинге используется [https://www.phpmyadmin.net/ phpMyAdmin].<br />
<br />
=== Разворачиваем копию сайта на новом домене ===<br />
После того как копия сайта сделана, мы разворачиваем её на новом домене - загружаем файлы сайта и UMI.CMS в нужную нам папку и импортируем базу данных. Импорт базы данных также можно провести с помощью инструментов, которые были приведены в предыдущем шаге. Если данные для подключения к базе данных на хостинге изменились - необходимо внести соответствующие изменения в файл config.ini в секцию [http://dev.docs.umi-cms.ru/nastrojka_sistemy/dostupnye_sekcii/sekciya_connections/ connections].<br />
<br />
=== Запрашиваем ключ для разработки и активируем систему ===<br />
Для того, чтобы иметь возможность полноценной работы с функционалом UMI.CMS на время выполнения отладочных работ или разработки сайта, необходимо запросить [http://wiki.umisoft.ru/Виды_ключей#Девелоперский_ключ дев.ключ] и провести [http://wiki.umisoft.ru/Переактивация переактивацию] системы этим ключом.<br />
<br />
==== Возможные проблемы с переактивацией ====<br />
На этапе переактивации системы может возникнуть ряд проблем, в числе которых частая ошибка "Недостаточно прав для работы с этим доменом". О причинах и возможных способах исправления этой ошибки Вы можете узнать в соответствующей [http://wiki.umisoft.ru/%D0%9E%D1%88%D0%B8%D0%B1%D0%BA%D0%B0_%22%D0%9D%D0%B5%D0%B4%D0%BE%D1%81%D1%82%D0%B0%D1%82%D0%BE%D1%87%D0%BD%D0%BE_%D0%BF%D1%80%D0%B0%D0%B2_%D0%B4%D0%BB%D1%8F_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%8B_%D1%81_%D1%8D%D1%82%D0%B8%D0%BC_%D0%B4%D0%BE%D0%BC%D0%B5%D0%BD%D0%BE%D0%BC%22 статье].<br />
== Итог ==<br />
После всех выполненных выше действий мы получаем полноценную копию сайта, работающего на UMI.CMS так же, как основной сайт. После проведения всех необходимых работ можно аналогичным образом перенести все сделанные изменения на основной сайт.<br />
[[category:Решение проблем и ошибок]]<br />
[[category:Вопросы и уроки разработки сайтов на UMI.CMS]]</div>Alelekovhttps://wiki.umisoft.ru/index.php?title=%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BA%D0%BE%D0%BF%D0%B8%D0%B8_%D1%81%D0%B0%D0%B9%D1%82%D0%B0_%D0%B4%D0%BB%D1%8F_%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B8&diff=9257Создание копии сайта для разработки2019-06-19T15:09:59Z<p>Alelekov: </p>
<hr />
<div>== Задача ==<br />
Необходимо провести какие-либо отладочные или иные работы на тестовом сайте, при этом основной сайт должен оставаться в рабочем состоянии.<br />
== Решение ==<br />
=== Копируем файлы сайта и базы данных ===<br />
Для начала необходимо создать саму копию сайта. Для этого мы создаём резервную копию файлов сайта средствами хостинга или же просто копируем все имеющиеся файлы, которые относятся к Вашему сайту и UMI.CMS, с хостинга. Вместе с этим, чтобы на тестовом сайте были все необходимые нам данные - мы создаём дамп базы данных и сохраняем его в формате sql. Сделать это можно с помощью утилиты [https://www.adminer.org/ adminer] или с помощью средств хостинга. Обычно для работы с базой данных на хостинге используется [https://www.phpmyadmin.net/ phpMyAdmin].<br />
<br />
=== Разворачиваем копию сайта на новом домене ===<br />
После того как копия сайта сделана, мы разворачиваем её на новом домене - загружаем файлы сайта и UMI.CMS в нужную нам папку и импортируем базу данных. Импорт базы данных также можно провести с помощью инструментов, которые были приведены в предыдущем шаге. Если данные для подключения к базе данных на хостинге изменились - необходимо внести соответствующие изменения в файл config.ini в секцию [http://dev.docs.umi-cms.ru/nastrojka_sistemy/dostupnye_sekcii/sekciya_connections/ connections].<br />
<br />
=== Запрашиваем ключ для разработки и активируем систему ===<br />
Для того, чтобы иметь возможность полноценной работы с функционалом UMI.CMS на время выполнения отладочных работ или разработки сайта, необходимо запросить [http://wiki.umisoft.ru/Виды_ключей#Девелоперский_ключ дев.ключ] и провести [http://wiki.umisoft.ru/Переактивация переактивацию] системы этим ключом.<br />
<br />
==== Возможные проблемы с переактивацией ====<br />
На этапе переактивации системы может возникнуть ряд проблем, в числе которых частая ошибка "Недостаточно прав для работы с этим доменом". О причинах и возможных способах исправления этой ошибки Вы можете узнать в соответствующей [http://wiki.umisoft.ru/%D0%9E%D1%88%D0%B8%D0%B1%D0%BA%D0%B0_%22%D0%9D%D0%B5%D0%B4%D0%BE%D1%81%D1%82%D0%B0%D1%82%D0%BE%D1%87%D0%BD%D0%BE_%D0%BF%D1%80%D0%B0%D0%B2_%D0%B4%D0%BB%D1%8F_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%8B_%D1%81_%D1%8D%D1%82%D0%B8%D0%BC_%D0%B4%D0%BE%D0%BC%D0%B5%D0%BD%D0%BE%D0%BC%22 статье].<br />
== Итог ==<br />
После всех выполненных выше действий мы получаем полноценную копию сайта, работающего на UMI.CMS так же, как основной сайт. После проведения всех необходимых работ можно аналогичным образом перенести все сделанные изменения на основной сайт.<br />
[[category:Решение проблем и ошибок]]<br />
[[category:Вопросы и уроки разработки сайтов на UMI.CMS]]</div>Alelekovhttps://wiki.umisoft.ru/index.php?title=%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BA%D0%BE%D0%BF%D0%B8%D0%B8_%D1%81%D0%B0%D0%B9%D1%82%D0%B0_%D0%B4%D0%BB%D1%8F_%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B8&diff=9256Создание копии сайта для разработки2019-06-19T15:08:17Z<p>Alelekov: </p>
<hr />
<div>== Задача ==<br />
Необходимо провести какие-либо отладочные или иные работы на тестовом сайте, при этом основной сайт должен оставаться в рабочем состоянии.<br />
== Решение ==<br />
=== Копируем файлы сайта и базы данных ===<br />
Для начала необходимо создать саму копию сайта. Для этого мы создаём резервную копию файлов сайта средствами хостинга или же просто копируем все имеющиеся файлы, которые относятся к Вашему сайту и UMI.CMS, с хостинга. Вместе с этим, чтобы на тестовом сайте были все необходимые нам данные - мы создаём дамп базы данных и сохраняем его в формате sql. Сделать это можно с помощью утилиты [https://www.adminer.org/ adminer] или с помощью средств хостинга. Обычно для работы с базой данных на хостинге используется [https://www.phpmyadmin.net/ phpMyAdmin].<br />
<br />
=== Разворачиваем копию сайта на новом домене ===<br />
После того как копия сайта сделана, мы разворачиваем её на новом домене - загружаем файлы сайта и UMI.CMS в нужную нам папку и импортируем базу данных. Импорт базы данных также можно провести с помощью инструментов, которые были приведены в предыдущем шаге. Если данные для подключения к базе данных на хостинге изменились - необходимо внести соответствующие изменения в файл config.ini в секцию [http://dev.docs.umi-cms.ru/nastrojka_sistemy/dostupnye_sekcii/sekciya_connections/ connections].<br />
<br />
=== Запрашиваем ключ для разработки и активируем систему ===<br />
Для того, чтобы иметь возможность полноценной работы с функционалом UMI.CMS на время выполнения отладочных работ или разработки сайта, необходимо запросить [http://wiki.umisoft.ru/Виды_ключей#Девелоперский_ключ дев.ключ] и провести [http://wiki.umisoft.ru/Переактивация переактивацию] системы этим ключом.<br />
<br />
==== Возможные проблемы с переактивацией ====<br />
На этапе переактивации системы может возникнуть ряд проблем, в числе которых частая ошибка "Недостаточно прав для работы с этим доменом". О причинах и возможных способах исправления этой ошибки Вы можете узнать в соответствующей [http://wiki.umisoft.ru/%D0%9E%D1%88%D0%B8%D0%B1%D0%BA%D0%B0_%22%D0%9D%D0%B5%D0%B4%D0%BE%D1%81%D1%82%D0%B0%D1%82%D0%BE%D1%87%D0%BD%D0%BE_%D0%BF%D1%80%D0%B0%D0%B2_%D0%B4%D0%BB%D1%8F_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%8B_%D1%81_%D1%8D%D1%82%D0%B8%D0%BC_%D0%B4%D0%BE%D0%BC%D0%B5%D0%BD%D0%BE%D0%BC%22 статье].<br />
== Итог ==<br />
После всех выполненных выше действий мы получаем полноценную копию сайта, работающего на UMI.CMS так же, как основной сайт. После проведения всех необходимых работ можно аналогичным образом перенести все сделанные изменения на основной сайт.<br />
[[category:Решение проблем и ошибок]]</div>Alelekovhttps://wiki.umisoft.ru/index.php?title=%D0%9E%D1%88%D0%B8%D0%B1%D0%BA%D0%B0:_%D0%9D%D0%B5%D0%B4%D0%BE%D1%81%D1%82%D0%B0%D1%82%D0%BE%D1%87%D0%BD%D0%BE_%D0%BF%D1%80%D0%B0%D0%B2_%D0%B4%D0%BB%D1%8F_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%8B_%D1%81_%D1%8D%D1%82%D0%B8%D0%BC_%D0%B4%D0%BE%D0%BC%D0%B5%D0%BD%D0%BE%D0%BC&diff=9255Ошибка: Недостаточно прав для работы с этим доменом2019-06-19T15:03:45Z<p>Alelekov: </p>
<hr />
<div>== Описание ==<br />
При попытке редактирования данных в админ. панели может возникнуть ошибка "Недостаточно прав для работы с этим доменом".<br />
<br />
== Решение == <br />
Данная ошибка возникает потому, что вход в админ. панель был произведён не с основного домена. В таком случае, необходимо проверить следующие пункты.<br />
=== Домен с www и без www - разные домены ===<br />
Допустим, при активации лицензии вы работали на домене mysite.ru - он и является вашим основным доменом, войдя в админ. панель с которого Вы не имеете ограничений на редактирования системных данных. Домен www.mysite.ru не является основным доменом системы, из-за чего, зайдя в админ. панель с этого адреса мы и получаем эту ошибку. В таком случае можно либо зайти на сайт с основного домена, либо, если вы хотите чтобы основным доменом был домен с www - провести [http://wiki.umisoft.ru/Переактивация переактивацию] системы на этот домен.<br />
<br />
=== Было изменено доменное имя сайта===<br />
В таком случае решение проблемы будет аналогичным предыдущему пункту - нужно провести [http://wiki.umisoft.ru/Переактивация переактивацию] системы.<br />
<br />
=== Основной домен в базе данных не соответствует домену, привязанному к лицензии ===<br />
Такая ситуация возможна при создании копии сайта для разработки, когда мы копируем базу данных с основного сайта. Т.к мы делали копию базы данных, там остались данные о нашем прошлом домене. В таком случае, нам необходимо перейти в таблицу cms3_domains и заменить указанный в столбце host домен на наш текущий домен, на котором мы планируем вести разработку.<br />
<br />
[[category:Решение проблем и ошибок]]</div>Alelekovhttps://wiki.umisoft.ru/index.php?title=%D0%9E%D1%88%D0%B8%D0%B1%D0%BA%D0%B0:_%D0%9D%D0%B5%D0%B4%D0%BE%D1%81%D1%82%D0%B0%D1%82%D0%BE%D1%87%D0%BD%D0%BE_%D0%BF%D1%80%D0%B0%D0%B2_%D0%B4%D0%BB%D1%8F_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%8B_%D1%81_%D1%8D%D1%82%D0%B8%D0%BC_%D0%B4%D0%BE%D0%BC%D0%B5%D0%BD%D0%BE%D0%BC&diff=9254Ошибка: Недостаточно прав для работы с этим доменом2019-06-19T15:00:19Z<p>Alelekov: Новая страница: «== Описание == При попытке редактирования данных в админ. панели может возникнуть ошибка "…»</p>
<hr />
<div>== Описание ==<br />
При попытке редактирования данных в админ. панели может возникнуть ошибка "Недостаточно прав для работы с этим доменом".<br />
<br />
== Решение == <br />
Данная ошибка возникает потому, что вход в админ. панель был произведён не с основного домена. В таком случае, необходимо проверить следующие пункты.<br />
=== Домен с www и без www - разные домены ===<br />
Допустим, при активации лицензии вы работали на домене mysite.ru - он и является вашим основным доменом, войдя в админ. панель с которого Вы не имеете ограничений на редактирования системных данных. Домен www.mysite.ru не является основным доменом системы, из-за чего, зайдя в админ. панель с этого адреса мы и получаем эту ошибку. В таком случае можно либо зайти на сайт с основного домена, либо, если вы хотите чтобы основным доменом был домен с www - провести [http://wiki.umisoft.ru/Переактивация переактивацию] системы на этот домен.<br />
<br />
=== Было изменено доменное имя сайта===<br />
В таком случае решение проблемы будет аналогичным предыдущему пункту - нужно провести [http://wiki.umisoft.ru/Переактивация переактивацию] системы.<br />
<br />
[[category:Решение проблем и ошибок]]</div>Alelekovhttps://wiki.umisoft.ru/index.php?title=%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BA%D0%BE%D0%BF%D0%B8%D0%B8_%D1%81%D0%B0%D0%B9%D1%82%D0%B0_%D0%B4%D0%BB%D1%8F_%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B8&diff=9252Создание копии сайта для разработки2019-06-19T14:22:06Z<p>Alelekov: Новая страница: «== Задача == Необходимо провести какие-либо отладочные или иные работы на тестовом сайте,…»</p>
<hr />
<div>== Задача ==<br />
Необходимо провести какие-либо отладочные или иные работы на тестовом сайте, при этом основной сайт должен оставаться в рабочем состоянии.<br />
== Решение ==<br />
=== Копируем файлы сайта и базы данных ===<br />
Для начала, необходимо создать саму копию сайта. Для этого мы создаём резервную копию файлов сайта средствами хостинга или же просто копируем все имеющиеся файлы, которые относятся к Вашему сайту и UMI.CMS, с хостинга. Вместе с этим, чтобы на тестовом сайте были все необходимые нам данные - мы создаём дамп базы данных и сохраняем его в формате sql. Сделать это можно с помощью утилиты [https://www.adminer.org/ adminer] или с помощью средств хостинга. Обычно для работы с базой данных на хостинге используется [https://www.phpmyadmin.net/ phpMyAdmin].<br />
<br />
=== Разворачиваем копию сайта на новом домене ===<br />
После того как копия сайта сделана, мы разворачиваем её на новом домене - загружаем файлы сайта и UMI.CMS в нужную нам папку и импортируем базу данных. Импорт базы данных также можно провести с помощью инструментов, которые были приведены в предыдущем шаге. Если данные для подключения к базе данных на хостинге изменились - необходимо внести соответствующие изменения в файл config.ini в секцию [http://dev.docs.umi-cms.ru/nastrojka_sistemy/dostupnye_sekcii/sekciya_connections/ connections].<br />
<br />
=== Запрашиваем ключ для разработки и активируем систему ===<br />
Для того, чтобы иметь возможность полноценной работы с функционалом UMI.CMS на время выполнения отладочных работ или разработки сайта, необходимо запросить [http://wiki.umisoft.ru/Виды_ключей#Девелоперский_ключ дев.ключ] и провести [http://wiki.umisoft.ru/Переактивация переактивацию] системы этим ключом.<br />
<br />
==== Возможные проблемы с переактивацией ====<br />
На этапе переактивации системы может возникнуть ряд проблем, в числе которых частая ошибка "Недостаточно прав для работы с этим доменом". Эта ошибка возникает если попытаться отредактировать какие-либо данные в UMI.CMS, зайдя в систему не с основного домена. Т.к мы делали копию базы данных, там остались данные о нашем прошлом домене. В таком случае, нам необходимо перейти в таблицу cms3_domains и заменить указанный в столбце host домен на наш текущий домен, на котором мы планируем вести разработку.<br />
<br />
== Итог ==<br />
После всех выполненных выше действий мы получаем полноценную копию сайта, работающего на UMI.CMS так же, как основной сайт. После проведения всех необходимых работ можно аналогичным образом перенести все сделанные изменения на основной сайт.<br />
[[category:Решение проблем и ошибок]]</div>Alelekovhttps://wiki.umisoft.ru/index.php?title=%D0%9A%D0%B0%D0%BA_%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%B0%D0%B8%D0%B2%D0%B0%D1%82%D1%8C_%D1%82%D0%BE%D1%80%D0%B3%D0%BE%D0%B2%D1%8B%D0%B5_%D0%BF%D1%80%D0%B5%D0%B4%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F&diff=9250Как настраивать торговые предложения2019-06-17T08:54:42Z<p>Alelekov: Новая страница: «== Задача == Реализовать возможность выбора размера одежды с помощью функционала торговы…»</p>
<hr />
<div>== Задача == <br />
Реализовать возможность выбора размера одежды с помощью функционала торговых предложений.<br />
<br />
== Решение ==<br />
<ol><br />
<li><br />
Для начала, нам необходимо описать значения, которые будет принимать размер одежды. Для этого мы переходим в модуль "Шаблоны данных" на вкладку "Справочники" и нажимаем "Добавить справочник". Никаких дополнительных полей в открывшемся окне заполнять не нужно, устанавливаем только название "Размер одежды". <br />
</li><br />
<li><br />
После создания справочника нужно заполнить его какими-либо значениями. В нашем случае это будет X, M, S. Находим созданный нами справочник в модуле "Шаблоны данных" на вкладке "Справочники", выделяем его и нажимаем "Посмотреть":<br />
[[Файл:cloth_size.png]]<br />
</li><br />
С помощью кнопки "Добавить наименование справочника" мы добавляем значения размера одежды и сохраняем их.<br />
<li><br />
Теперь, когда мы установили, какие значения может принимать размер одежды, нам нужно добавить соответствующее свойство в тип данных "Объект каталога" или один из его дочерних типов. В модуле "Шаблоны данных" находим позицию "Объект каталога" и открываем его для редактирования. Находим группу "Торговые предложения [trade_offers]" и добавляем в эту группу новое поле под названием "Размер одежды". Настройки этого поля будут следующими: <br />
[[Файл:t_o_example.png]]<br />
</li><br />
В поле "Справочник" мы указываем справочник со значениями, которые мы описали для размера одежды. <br />
<br />
На этом все настройки окончены. Теперь мы можем перейти в модуль "Каталог" и добавить торговые предложения с нужными нам свойствами к товару.<br />
<li>Добавляем новую позицию торгового предложения и указываем ей какие-либо характеристики. Если нашего свойства "Размер одежды" нет среди доступных столбцов для редактирования - мы просто добавляем его через "+":<br />
[[Файл:add_tp.png]]<br />
</li><br />
</ol><br />
<br />
== Итог ==<br />
Выполнение всех перечисленных действий позволяет настроить работу торговых предложений на вашем сайте. Однако, вывод торговых предложений будет зависеть от каждого конкретного шаблона. Для нашего примера это будет выглядеть следующим образом:<br />
<br/><br />
[[Файл:tp_result.png]]<br />
<br />
[[category:Модуль Каталог]]</div>Alelekovhttps://wiki.umisoft.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Tp_result.png&diff=9249Файл:Tp result.png2019-06-17T08:51:33Z<p>Alelekov: </p>
<hr />
<div></div>Alelekovhttps://wiki.umisoft.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Add_tp.png&diff=9248Файл:Add tp.png2019-06-17T08:48:52Z<p>Alelekov: Alelekov загрузил новую версию Файл:Add tp.png</p>
<hr />
<div></div>Alelekovhttps://wiki.umisoft.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Add_tp.png&diff=9247Файл:Add tp.png2019-06-17T08:47:46Z<p>Alelekov: </p>
<hr />
<div></div>Alelekovhttps://wiki.umisoft.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:T_o_example.png&diff=9246Файл:T o example.png2019-06-17T08:44:59Z<p>Alelekov: </p>
<hr />
<div></div>Alelekovhttps://wiki.umisoft.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Cloth_size.png&diff=9245Файл:Cloth size.png2019-06-17T08:43:14Z<p>Alelekov: </p>
<hr />
<div></div>Alelekovhttps://wiki.umisoft.ru/index.php?title=%D0%92%D0%B8%D0%B7%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5_%D0%BE%D1%84%D0%BE%D1%80%D0%BC%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BD%D0%B5%D0%B4%D0%B0%D0%B2%D0%BD%D0%BE_%D0%B4%D0%BE%D0%B1%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%BD%D1%8B%D1%85_%D1%82%D0%BE%D0%B2%D0%B0%D1%80%D0%BE%D0%B2&diff=9227Визуальное оформление недавно добавленных товаров2019-05-28T12:45:34Z<p>Alelekov: </p>
<hr />
<div>'''Актуально для версии 20'''<br />
<br />
== Задача ==<br />
Автоматически помечать добавленный в последние две недели товар как "Новинка".<br />
<br />
== Решение ==<br />
<br />
С помощью не сложных манипуляций, для товара, добавленного на сайте в какой-то промежуток времени, допустим в последние две недели, можно поставить флаг "Новинка". Делается это следующим образом:<br />
<ol><br />
<li>В типе данных "Объект каталога" в модуле "Шаблоны данных" добавляем поле "Дата добавления" с идентификатором '''publish_time'''.</li><br />
В результате чего, при добавлении товара, в новое поле будет автоматически записываться текущее время.<br />
<li>Затем, в файле '''~/classes/components/catalog/customMacros.php''' опишем макрос, который будет автоматически помечать только что созданный товар как "Новинку":</li><br />
<br />
<source lang="php"><br />
public function setIsNewItem(iUmiEventPoint $oEventPoint) { <br />
if ($oEventPoint->getMode() != "after"){<br />
return;<br />
}<br />
<br />
$object = $oEventPoint->getRef("element");<br />
$object->setValue('new', 1);<br />
$object->commit(); <br />
}<br />
</source><br />
<br />
Макрос описан, осталось лишь добавить привязку к событию создания объекта. В файле '''/classes/components/catalog/custom_events.php''' пишем следующее:<br />
<source lang ="php"><br />
<?php<br />
new umiEventListener('systemCreateElement', 'catalog', 'setIsNewItem');<br />
</source><br />
<br />
<li>Теперь перейдём к автоматизации. Допустим, мы хотим, чтобы каждые две недели список "Новинок" актуализировался - "старые новинки" становились обычными товарами, а новые поддерживались в актуальном состоянии. Воспользуемся для этого таким механизмом как [http://dev.docs.umi-cms.ru/nastrojka_sistemy/cron/ cron].</li><br />
</ol><br />
<br />
=== Настройка cron и написание макроса обновления ===<br />
После настройки выполнения cron на хостинге у нас будет выполняться ряд обработчиков, присутствующих в системе по умолчанию. По аналогии с предыдущим пунктом, сначала напишем метод, который будет выполняться по cron:<br />
<ol><br />
<li>Для начала, в файле '''~/classes/components/catalog/customMacros.php''' опишем константу, которая будет равна необходимому нам временному интервалу - две недели - в секундах. Добавим её после "public $module":<br />
<source lang="php"><br />
public $module;<br />
<br />
// Промежуток времени, в котором добавленный товар считается новинкой<br />
// Данное число = 2 неделям<br />
const INTERVAL = 1209600; <br />
</source><br />
</li><br />
<li><br />
Теперь напишем код обработчика:<br />
<source lang="php"><br />
public function actualize(iUmiEventPoint $oEventPoint)<br />
{<br />
if ($oEventPoint->getMode() != "process"){<br />
return;<br />
}<br />
// Собираем все объекты-новинки и проверяем, не устарели ли они (вне заданного интервала времени)<br />
$newItemsStartArrivingTime = time() - self::INTERVAL;<br />
<br />
// Получить все "Новинки"<br />
$newItemsSelector = new selector('pages');<br />
$newItemsSelector->types('hierarchy-type')->name('catalog', 'object'); <br />
$newItemsSelector->where('new')->equals(1); <br />
foreach($newItemsSelector as $item) <br />
{<br />
$publishTime = $item->getValue('publish_time'); <br />
$timestamp = $publishTime->getDateTimeStamp();<br />
if($timestamp < $newItemsStartArrivingTime)<br />
{<br />
// Обнулили "новинку" у тех, кто уже вне нашего интервала времени<br />
$item->setValue('new', 0);<br />
}<br />
} <br />
}<br />
</source><br />
</li><br />
<li>Обработчик написан, осталось только привязать его к событию выполнения cron. В файле '''/classes/components/catalog/custom_events.php''' добавляем следующую запись:<br />
<source lang="php"><br />
new umiEventListener('cron', 'catalog', 'actualize');<br />
</source><br />
</li><br />
<br />
</ol><br />
<br />
== Итог ==<br />
После всех выполненных действий мы реализовали функционал, который делает для нас доступными следующие возможности:<br />
<ol><br />
<li>При добавлении товара он автоматически помечается как "Новинка"</li><br />
<li>Как только пройдёт заданный нами промежуток времени, при запуске cron все "новинки", если они находятся вне нашего временного интервала, станут обычными товарами.</li><br />
</ol><br />
<br />
[[Категория:Модуль Каталог]][[Категория:Написание кастомных макросов]]</div>Alelekovhttps://wiki.umisoft.ru/index.php?title=%D0%9D%D0%B0%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%81%D0%B2%D0%BE%D0%B9%D1%81%D1%82%D0%B2_%D0%BE%D1%82_%D1%80%D0%BE%D0%B4%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D1%81%D0%BA%D0%BE%D0%B3%D0%BE_%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%B0&diff=9224Наследование свойств от родительского элемента2019-05-27T14:49:16Z<p>Alelekov: </p>
<hr />
<div>'''Актуально для версии 20'''<br />
<br />
== Задача ==<br />
При создании страниц сайта автоматически наследовать какие-либо свойства родительской страницы.<br />
== Решение ==<br />
<br />
Для реализации наследования свойств родительского элемента напишем кастомный обработчик события, который будет наследовать свойство "Исключить из поиска".<br />
Для начала, напишем вызов обработчика по событию создания элемента в файле '''~/classes/components/content/custom_events.php'''<br />
<source lang="php"><br />
<?php<br />
new umiEventListener('systemCreateElement', 'content', 'inheritance_properties');<br />
?><br />
</source><br />
А вот и сам код обработчика, который нужно поместить в файл ~/classes/components/content/customAdmin.php <source lang="php"><br />
public function inheritance_properties(iUmiEventPoint $oEventPoint) {<br />
if ($oEventPoint->getMode() != "after"){<br />
return;<br />
} <br />
<br />
$object = $oEventPoint->getRef("element");<br />
<br />
$id = $object->id; <br />
$parentId = $object->getParentId();<br />
<br />
$hierarchy = umiHierarchy::getInstance();<br />
$parent=$hierarchy->getElement($parentId);<br />
$object=$hierarchy->getElement($id);<br />
<br />
$value=$parent->getValue('is_unindexed');<br />
<br />
$object->setValue('is_unindexed',$value); <br />
$object->commit(); <br />
return true;<br />
}<br />
</source><br />
<br />
Здесь is_unindexed - идентификатор поля "Исключить из поиска".<br />
После занесения записи об этом методе в файл '''~/classes/components/content/permissions.custom.php''' он будет работать для всех пользователей, которые имеют доступ к панели администрирования.<br />
<br />
[[Категория: API]]</div>Alelekovhttps://wiki.umisoft.ru/index.php?title=%D0%94%D0%BE%D0%B1%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%86%D0%B8%D0%B8_%D0%B2_%D0%BF%D0%B8%D1%81%D1%8C%D0%BC%D0%B0_%D1%81_%D1%84%D0%BE%D1%80%D0%BC%D1%8B_%D0%BE%D0%B1%D1%80%D0%B0%D1%82%D0%BD%D0%BE%D0%B9_%D1%81%D0%B2%D1%8F%D0%B7%D0%B8&diff=9220Добавление информации в письма с формы обратной связи2019-05-24T10:57:03Z<p>Alelekov: /* Решение */</p>
<hr />
<div>'''Актуально для версии 20'''<br />
<br />
== Задача ==<br />
Передать из формы обратной связи какие-либо данные, которые нужны нам, но для пользователя не должны быть видны. <br />
<br />
== Решение ==<br />
Для примера мы рассмотрим добавление информации о домене, с которого была отправлена форма.<br />
<br />
<ol><br />
<li> Создаём в модуле "Шаблоны данных" в типе данных "Форма обратной связи" новую группу полей, назовём её "Дополнительная информация".</li><br />
<li> В созданной группе полей добавляем поле под названием "Информация", с идентификатором info и типом "Простой текст". Поле не должно быть видимым, поэтому галочку на "Видимое" мы не ставим:<br />
</li><br />
[[Файл:Info.png]]<br />
<li> Теперь нам нужно создать [http://api.docs.umi-cms.ru/razrabotka_nestandartnogo_funkcionala/sobytijnaya_model_umicms/naznachenie_obrabotchika_sobytiya/ обработчик события] создания сообщения [http://api.docs.umi-cms.ru/razrabotka_nestandartnogo_funkcionala/sobytijnaya_model_umicms/standartnye_tochki_vyzova/#sel=21:1,21:1 webforms_create_message]. Для этого создадим в папке '''~/classes/components/webforms''' файл custom_events.php и напишем там следующий код:<br />
<source lang="php"><br />
<?php<br />
new umiEventListener("webforms_create_message", "webforms", "onCreateMessage");<br />
?><br />
</source><br />
</li><br />
<li><br />
После того, как мы назначили обработчик, нам надо [http://api.docs.umi-cms.ru/razrabotka_nestandartnogo_funkcionala/sobytijnaya_model_umicms/pishem_obrabotchik_sobytiya/ написать его код]. Код нашего обработчика будет следующим:<br />
<source lang="php"><br />
public function onCreateMessage(iUmiEventPoint $oEventPoint)<br />
{ <br />
if ($oEventPoint->getMode() != "after") {<br />
return;<br />
}<br />
<br />
<br />
$id = $oEventPoint->getParam('messageId');<br />
$sel = new selector('objects');<br />
$sel->where('id')->equals($id);<br />
$res = $sel->result();<br />
<br />
$message = $res[0];<br />
$message->setValue('info', $_SERVER['SERVER_NAME']);<br />
$message->commit();<br />
}<br />
</source><br />
<br />
Этот код необходимо разместить в файле '''~/classes/components/webforms/customMacros.php'''<br />
В предпоследней строке кода мы присваиваем полю info какое-либо значение. В нашем примере это текущий домен, с которого отправлена форма, но Вы можете добавлять туда любое нужное Вам значение.<br />
</li><br />
<li> Все необходимые шаги выполнены, и теперь осталось только добавить вывод нашего поля info в письмах, которые приходят с формы. Для этого мы заходим в модуль "Конструктор форм", вкладка "Шаблоны писем" и выбираем нужный нам шаблон. В шаблоне нам нужно только прописать макрос для вывода поля - %info%. </li><br />
[[Файл:Template.png]]<br />
</ol><br />
<br><br />
На этом все необходимые действия завершены и теперь при отправке формы, помимо данных, введённых пользователем, мы будем получать какую-то дополнительную информацию, нужную нам.<br />
<br />
[[category:Модуль Обратная связь]]</div>Alelekovhttps://wiki.umisoft.ru/index.php?title=%D0%9E%D1%87%D0%B8%D1%81%D1%82%D0%BA%D0%B0_%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%D1%87%D0%BD%D0%B8%D0%BA%D0%B0_%D0%9D%D0%B5%D0%B7%D0%B0%D1%80%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BF%D0%BE%D0%BA%D1%83%D0%BF%D0%B0%D1%82%D0%B5%D0%BB%D1%8C_%D0%BF%D0%BE_cron&diff=9214Очистка справочника Незарегистрированный покупатель по cron2019-05-24T08:35:20Z<p>Alelekov: </p>
<hr />
<div>'''Актуально для версии 20'''<br />
<br />
== Задача ==<br />
Проводить очистку справочника "Незарегистрированный покупатель" при запуске [http://dev.docs.umi-cms.ru/nastrojka_sistemy/cron/ cron].<br/><br />
Задача очищения данного справочника актуальная для тех сайтов, количество посещений на которые достигает нескольких тысяч незарегистрированных пользователей в день, из-за чего данные в справочнике достигают больших объёмов, что сказывается на работе сайта.<br />
<br />
== Решение ==<br />
<br />
В первую очередь, нам необходимо назначить обработчик события запуска cron в файле ~/classes/components/config/custom_events.php (если файла нет - необходимо создать его). Обработчик назначается таким образом:<br />
<source lang="php"><br />
<?php <br />
new umiEventListener('cron', 'config', 'deleteUnregisteredCustomers');<br />
</source><br />
<br />
Затем нам нужно описать функцию, которая будет очищать справочник. В файле ~/classes/components/config/customMacros.php создаём функцию, которую мы назначили на обработку события запуска cron. В нашем случае это функция deleteUnregisteredCustomers, выглядит она вот так:<br />
<source lang="php"><br />
public function deleteUnregisteredCustomers(iUmiEventPoint $e)<br />
{<br />
if ($e->getMode() == 'process') {<br />
// Получить объекты справочника<br />
$unregisteredCustomersData = umiObjectsCollection::getInstance()->getGuidedItems(<здесь нужно указать идентификатор справочника>);<br />
<br />
// Массив содержит значения вида идентификатор => значение<br />
$ids = array_keys($unregisteredCustomersData);<br />
$objectsCollection = umiObjectsCollection::getInstance();<br />
// Проходимся по всем найденным объектам в справочнике "Незарегистрированный покупатель" и удаляем их<br />
// Тут можно настроить кол-во удаляемых за раз объектов, заменив foreach на for и указав ограничения<br />
foreach($ids as $id)<br />
{<br />
$objectsCollection->delObject($id);<br />
}<br />
}<br />
}<br />
</source><br />
<br />
Обратите внимание, что в функции необходимо указать идентификатор справочника "Незарегистрированный покупатель", а не какого-либо другого, иначе можно удалить другие, возможно, нужные Вам данные другого справочника. Идентификатор справочника Вы можете узнать, открыв справочник "Незарегистрированный покупатель" для просмотра и посмотрев последнее число в адресной строке. В нашем случае это число 88:<br />
<br />
[[Файл:Screenshot_10.png]]<br />
<br />
После всех этих действий справочник "Незарегистрированный покупатель" будет очищаться каждый раз по запуску cron. <br />
<br />
<br />
[[category:Написание кастомных макросов]]</div>Alelekovhttps://wiki.umisoft.ru/index.php?title=%D0%9E%D1%87%D0%B8%D1%81%D1%82%D0%BA%D0%B0_%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%D1%87%D0%BD%D0%B8%D0%BA%D0%B0_%D0%9D%D0%B5%D0%B7%D0%B0%D1%80%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BF%D0%BE%D0%BA%D1%83%D0%BF%D0%B0%D1%82%D0%B5%D0%BB%D1%8C_%D0%BF%D0%BE_cron&diff=9213Очистка справочника Незарегистрированный покупатель по cron2019-05-24T08:31:43Z<p>Alelekov: </p>
<hr />
<div>'''Актуально для версии 20'''<br />
<br />
== Задача ==<br />
Проводить очистку справочника "Незарегистрированный покупатель" при запуске [http://dev.docs.umi-cms.ru/nastrojka_sistemy/cron/ cron].<br />
Задача очищения данного справочника актуальная для тех сайтов, количество посещений на которые достигает нескольких тысяч незарегистрированных пользователей в день, из-за чего данные в справочнике достигают больших объёмов, что сказывается на работе сайта.<br />
<br />
== Решение ==<br />
<br />
В первую очередь, нам необходимо назначить обработчик события запуска cron в файле ~/classes/components/config/custom_events.php (если файла нет - необходимо создать его). Обработчик назначается таким образом:<br />
<source lang="php"><br />
<?php <br />
new umiEventListener('cron', 'config', 'deleteUnregisteredCustomers');<br />
</source><br />
<br />
Затем нам нужно описать функцию, которая будет очищать справочник. В файле ~/classes/components/config/customMacros.php создаём функцию, которую мы назначили на обработку события запуска cron. В нашем случае это функция deleteUnregisteredCustomers, выглядит она вот так:<br />
<source lang="php"><br />
public function deleteUnregisteredCustomers(iUmiEventPoint $e)<br />
{<br />
if ($e->getMode() == 'process') {<br />
// Получить объекты справочника<br />
$unregisteredCustomersData = umiObjectsCollection::getInstance()->getGuidedItems(<здесь нужно указать идентификатор справочника>);<br />
<br />
// Массив содержит значения вида идентификатор => значение<br />
$ids = array_keys($unregisteredCustomersData);<br />
$objectsCollection = umiObjectsCollection::getInstance();<br />
// Проходимся по всем найденным объектам в справочнике "Незарегистрированный покупатель" и удаляем их<br />
// Тут можно настроить кол-во удаляемых за раз объектов, заменив foreach на for и указав ограничения<br />
foreach($ids as $id)<br />
{<br />
$objectsCollection->delObject($id);<br />
}<br />
}<br />
}<br />
</source><br />
<br />
Обратите внимание, что в функции необходимо указать идентификатор справочника "Незарегистрированный покупатель", а не какого-либо другого, иначе можно удалить другие, возможно, нужные Вам данные другого справочника. Идентификатор справочника Вы можете узнать, открыв справочник "Незарегистрированный покупатель" для просмотра и посмотрев последнее число в адресной строке. В нашем случае это число 88:<br />
<br />
[[Файл:Screenshot_10.png]]<br />
<br />
После всех этих действий справочник "Незарегистрированный покупатель" будет очищаться каждый раз по запуску cron. <br />
<br />
<br />
[[category:Написание кастомных макросов]]</div>Alelekovhttps://wiki.umisoft.ru/index.php?title=%D0%9A%D0%B0%D1%81%D1%82%D0%BE%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D1%81%D0%BE%D0%BE%D1%82%D0%B2%D0%B5%D1%82%D1%81%D1%82%D0%B2%D0%B8%D1%8F_%D1%81%D1%82%D0%B0%D1%82%D1%83%D1%81%D0%BE%D0%B2_%D0%B7%D0%B0%D0%BA%D0%B0%D0%B7%D0%BE%D0%B2&diff=9212Кастомизация соответствия статусов заказов2019-05-23T16:48:06Z<p>Alelekov: Новая страница: «'''Актуально для версии 20''' == Задача == Добавить кастомные соответствия между статусами з…»</p>
<hr />
<div>'''Актуально для версии 20'''<br />
<br />
== Задача ==<br />
Добавить кастомные соответствия между статусами заказов в 1С и статусами заказов на сайте.<br />
<br />
<br />
== Доступные по умолчанию соответствия ==<br />
На данный момент в системе по умолчанию доступны следующие соответствия статусов заказа на сайте:Доставляется, Закрыт, Готов.<br />
Эти статусы проставляются на сайте в зависимости от информации, которая приходит из 1С в файлах выгрузки. Эти соответствия описаны в файле <br />
'''~/xsl/import/commerceML2.xsl''' и выглядят следующим образом:<br />
<br />
<ul><br />
<li>1. Если заполнено поле "Дата отгрузки по 1С" - Доставляется</li><br />
<li>2. Если стоит "Пометка удаления" - Закрыт</li><br />
<li>3. Если заказ в статусе "Проведён" - Готов</li><br />
</ul><br />
<br />
== Решение ==<br />
=== Создание нового соответствия ===<br />
<br />
Рассмотрим вариант создания нового статуса заказа на сайте и установление соответствия между ним и данными из 1С.<br />
<ol><br />
<li> [http://wiki.umisoft.ru/Создание_нового_статуса_заказа Создаём] новый статус заказа, назовём его "Отгружен", в поле "Код статуса" пропишем "shipped".</li><br />
<li> Из файла '''~/xsl/import/commerceML2.xsl''' копируем весь блок <source lang="xml"><xsl:template match="Документ"></source></li><br />
В скопированном блоке первые несколько строк - описание параметров, которые будут использоваться в шаблоне далее.<br />
<li> Заводим свой параметр, назовём его is_shipped. Добавляем в начало блока запись<br />
<source lang="xml"><br />
<xsl:param name="is_shipped" select="$properties[Наименование = 'Отгружен']/Значение = 'true'" /><br />
</source><br />
</li><br />
<li>Затем, в блоке <source lang="xml"><group name="order_props"></source></li><br />
мы находим следующий блок кода, где перечисляется обработка соответствия статусов заказов:<br />
<source lang="xml"><br />
<xsl:choose><br />
<xsl:when test="$is_canceled"><br />
<property name="status_id"><br />
<title>Статус заказа</title><br />
<value>canceled</value><br />
</property><br />
</xsl:when><br />
<xsl:when test="$is_ready"><br />
<property name="status_id"><br />
<title>Статус заказа</title><br />
<value>ready</value><br />
</property><br />
</xsl:when> <br />
</xsl:choose><br />
</source><br />
и добавляем перед <source lang="xml"></xsl:choose></source> код для обработки нашего нового статуса заказа:<br />
<source lang="xml"><br />
<xsl:when test="$is_shipped"><br />
<property name="status_id"><br />
<title>Статус заказа</title><br />
<value>shipped</value><br />
</property><br />
</xsl:when><br />
</source><br />
</ol><br />
<br />
На этом все необходимые действия выполнены и при следующем обмене данными с 1С у заказов, в файле выгрузки которых будет иметься запись:<br />
<source lang="xml"><br />
<ЗначениеРеквизита><br />
<Наименование>Отгружен</Наименование><br />
<Значение>true</Значение><br />
</ЗначениеРеквизита><br />
</source><br />
<br />
статус будет установлен в "Отгружен".<br />
=== Переопределение существующих соответствий ===<br />
<br />
Переопределение существующих соответствий делается абсолютно тем же путём, как и создание нового соответствия.<br />
<ol><br />
<li> Сначала мы смотрим доступные статусы заказов в справочнике "Статус заказа" в модуле "Шаблоны данных"</li><br />
<li> Затем смотрим поле "Код статуса" - именно его мы будем использовать для определения статуса</li><br />
<li> Выполняем все те же пункты, которые мы делали при создании нового заказа, но пропускаем пункты 3 и 4 </li><br />
<li> Нам остаётся лишь изменить значение между тегами value в необходимого нам статуса на тот код статуса, который мы выбрали</li><br />
</ol><br />
<br />
[[category:Интеграция с 1С]]</div>Alelekovhttps://wiki.umisoft.ru/index.php?title=%D0%9E%D1%87%D0%B8%D1%81%D1%82%D0%BA%D0%B0_%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%D1%87%D0%BD%D0%B8%D0%BA%D0%B0_%D0%9D%D0%B5%D0%B7%D0%B0%D1%80%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BF%D0%BE%D0%BA%D1%83%D0%BF%D0%B0%D1%82%D0%B5%D0%BB%D1%8C_%D0%BF%D0%BE_cron&diff=9211Очистка справочника Незарегистрированный покупатель по cron2019-05-23T16:21:35Z<p>Alelekov: </p>
<hr />
<div>'''Актуально для версии 20'''<br />
<br />
== Задача ==<br />
Проводить очистку справочника "Незарегистрированный покупатель" при запуске [http://dev.docs.umi-cms.ru/nastrojka_sistemy/cron/ cron].<br />
<br />
== Решение ==<br />
<br />
В первую очередь, нам необходимо назначить обработчик события запуска cron в файле ~/classes/components/config/custom_events.php (если файла нет - необходимо создать его). Обработчик назначается таким образом:<br />
<source lang="php"><br />
<?php <br />
new umiEventListener('cron', 'config', 'deleteUnregisteredCustomers');<br />
</source><br />
<br />
Затем нам нужно описать функцию, которая будет очищать справочник. В файле ~/classes/components/config/customMacros.php создаём функцию, которую мы назначили на обработку события запуска cron. В нашем случае это функция deleteUnregisteredCustomers, выглядит она вот так:<br />
<source lang="php"><br />
public function deleteUnregisteredCustomers(iUmiEventPoint $e)<br />
{<br />
if ($e->getMode() == 'process') {<br />
// Получить объекты справочника<br />
$unregisteredCustomersData = umiObjectsCollection::getInstance()->getGuidedItems(<здесь нужно указать идентификатор справочника>);<br />
<br />
// Массив содержит значения вида идентификатор => значение<br />
$ids = array_keys($unregisteredCustomersData);<br />
$objectsCollection = umiObjectsCollection::getInstance();<br />
// Проходимся по всем найденным объектам в справочнике "Незарегистрированный покупатель" и удаляем их<br />
// Тут можно настроить кол-во удаляемых за раз объектов, заменив foreach на for и указав ограничения<br />
foreach($ids as $id)<br />
{<br />
$objectsCollection->delObject($id);<br />
}<br />
}<br />
}<br />
</source><br />
<br />
Обратите внимание, что в функции необходимо указать идентификатор справочника "Незарегистрированный покупатель", а не какого-либо другого, иначе можно удалить другие, возможно, нужные Вам данные другого справочника. Идентификатор справочника Вы можете узнать, открыв справочник "Незарегистрированный покупатель" для просмотра и посмотрев последнее число в адресной строке. В нашем случае это число 88:<br />
<br />
[[Файл:Screenshot_10.png]]<br />
<br />
После всех этих действий справочник "Незарегистрированный покупатель" будет очищаться каждый раз по запуску cron. <br />
<br />
<br />
[[category:Написание кастомных макросов]]</div>Alelekovhttps://wiki.umisoft.ru/index.php?title=%D0%9E%D1%87%D0%B8%D1%81%D1%82%D0%BA%D0%B0_%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%D1%87%D0%BD%D0%B8%D0%BA%D0%B0_%D0%9D%D0%B5%D0%B7%D0%B0%D1%80%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BF%D0%BE%D0%BA%D1%83%D0%BF%D0%B0%D1%82%D0%B5%D0%BB%D1%8C_%D0%BF%D0%BE_cron&diff=9210Очистка справочника Незарегистрированный покупатель по cron2019-05-23T16:20:31Z<p>Alelekov: Новая страница: «'''Актуально для версии 20''' == Задача == Проводить очистку справочника "Незарегистрированн…»</p>
<hr />
<div>'''Актуально для версии 20'''<br />
<br />
== Задача ==<br />
Проводить очистку справочника "Незарегистрированный покупатель" при запуске cron.<br />
<br />
== Решение ==<br />
<br />
В первую очередь, нам необходимо назначить обработчик события запуска cron в файле ~/classes/components/config/custom_events.php (если файла нет - необходимо создать его). Обработчик назначается таким образом:<br />
<source lang="php"><br />
<?php <br />
new umiEventListener('cron', 'config', 'deleteUnregisteredCustomers');<br />
</source><br />
<br />
Затем нам нужно описать функцию, которая будет очищать справочник. В файле ~/classes/components/config/customMacros.php создаём функцию, которую мы назначили на обработку события запуска cron. В нашем случае это функция deleteUnregisteredCustomers, выглядит она вот так:<br />
<source lang="php"><br />
public function deleteUnregisteredCustomers(iUmiEventPoint $e)<br />
{<br />
if ($e->getMode() == 'process') {<br />
// Получить объекты справочника<br />
$unregisteredCustomersData = umiObjectsCollection::getInstance()->getGuidedItems(<здесь нужно указать идентификатор справочника>);<br />
<br />
// Массив содержит значения вида идентификатор => значение<br />
$ids = array_keys($unregisteredCustomersData);<br />
$objectsCollection = umiObjectsCollection::getInstance();<br />
// Проходимся по всем найденным объектам в справочнике "Незарегистрированный покупатель" и удаляем их<br />
// Тут можно настроить кол-во удаляемых за раз объектов, заменив foreach на for и указав ограничения<br />
foreach($ids as $id)<br />
{<br />
$objectsCollection->delObject($id);<br />
}<br />
}<br />
}<br />
</source><br />
<br />
Обратите внимание, что в функции необходимо указать идентификатор справочника "Незарегистрированный покупатель", а не какого-либо другого, иначе можно удалить другие, возможно, нужные Вам данные другого справочника. Идентификатор справочника Вы можете узнать, открыв справочник "Незарегистрированный покупатель" для просмотра и посмотрев последнее число в адресной строке. В нашем случае это число 88:<br />
<br />
[[Файл:Screenshot_10.png]]<br />
<br />
После всех этих действий справочник "Незарегистрированный покупатель" будет очищаться каждый раз по запуску cron. <br />
<br />
<br />
[[category:Написание кастомных макросов]]</div>Alelekovhttps://wiki.umisoft.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Screenshot_10.png&diff=9209Файл:Screenshot 10.png2019-05-23T16:19:45Z<p>Alelekov: </p>
<hr />
<div></div>Alelekovhttps://wiki.umisoft.ru/index.php?title=%D0%94%D0%BE%D0%B1%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%86%D0%B8%D0%B8_%D0%B2_%D0%BF%D0%B8%D1%81%D1%8C%D0%BC%D0%B0_%D1%81_%D1%84%D0%BE%D1%80%D0%BC%D1%8B_%D0%BE%D0%B1%D1%80%D0%B0%D1%82%D0%BD%D0%BE%D0%B9_%D1%81%D0%B2%D1%8F%D0%B7%D0%B8&diff=9207Добавление информации в письма с формы обратной связи2019-05-21T12:09:42Z<p>Alelekov: </p>
<hr />
<div>'''Актуально для версии 20'''<br />
<br />
== Задача ==<br />
Передать из формы обратной связи какие-либо данные, которые нужны нам, но для пользователя не должны быть видны. <br />
<br />
== Решение ==<br />
Для примера мы рассмотрим добавление информации о домене, с которого была отправлена форма.<br />
<br />
<ol><br />
<li> Создаём в модуле "Шаблоны данных" в типе данных "Форма обратной связи" новую группу полей, назовём её "Дополнительная информация".</li><br />
<li> В созданной группе полей добавляем поле под названием "Информация", с идентификатором info и типом "Простой текст". Поле не должно быть видимым, поэтому галочку на "Видимое" мы не ставим:<br />
</li><br />
[[Файл:Info.png]]<br />
<li> Теперь нам нужно создать [http://api.docs.umi-cms.ru/razrabotka_nestandartnogo_funkcionala/sobytijnaya_model_umicms/naznachenie_obrabotchika_sobytiya/ обработчик события] создания сообщения [http://api.docs.umi-cms.ru/razrabotka_nestandartnogo_funkcionala/sobytijnaya_model_umicms/standartnye_tochki_vyzova/#sel=21:1,21:1 webforms_create_message]. Для этого создадим в папке '''~/classes/components/webforms''' файл custom_events.php и напишем там следующий код:<br />
<source lang="php"><br />
<?php<br />
new umiEventListener("webforms_post", "webforms", "onCreateMessage");<br />
?><br />
</source><br />
</li><br />
<li><br />
После того, как мы назначили обработчик, нам надо [http://api.docs.umi-cms.ru/razrabotka_nestandartnogo_funkcionala/sobytijnaya_model_umicms/pishem_obrabotchik_sobytiya/ написать его код]. Код нашего обработчика будет следующим:<br />
<source lang="php"><br />
public function onCreateMessage(iUmiEventPoint $oEventPoint)<br />
{ <br />
if ($oEventPoint->getMode() != "after") {<br />
return;<br />
}<br />
<br />
<br />
$id = $oEventPoint->getParam('messageId');<br />
$sel = new selector('objects');<br />
$sel->where('id')->equals($id);<br />
$res = $sel->result();<br />
<br />
$message = $res[0];<br />
$message->setValue('info', $_SERVER['SERVER_NAME']);<br />
$message->commit();<br />
}<br />
</source><br />
<br />
Этот код необходимо разместить в файле '''~/classes/components/webforms/customMacros.php'''<br />
В предпоследней строке кода мы присваиваем полю info какое-либо значение. В нашем примере это текущий домен, с которого отправлена форма, но Вы можете добавлять туда любое нужное Вам значение.<br />
</li><br />
<li> Все необходимые шаги выполнены, и теперь осталось только добавить вывод нашего поля info в письмах, которые приходят с формы. Для этого мы заходим в модуль "Конструктор форм", вкладка "Шаблоны писем" и выбираем нужный нам шаблон. В шаблоне нам нужно только прописать макрос для вывода поля - %info%. </li><br />
[[Файл:Template.png]]<br />
</ol><br />
<br><br />
На этом все необходимые действия завершены и теперь при отправке формы, помимо данных, введённых пользователем, мы будем получать какую-то дополнительную информацию, нужную нам.<br />
<br />
[[category:Модуль Обратная связь]]</div>Alelekovhttps://wiki.umisoft.ru/index.php?title=%D0%94%D0%BE%D0%B1%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%86%D0%B8%D0%B8_%D0%B2_%D0%BF%D0%B8%D1%81%D1%8C%D0%BC%D0%B0_%D1%81_%D1%84%D0%BE%D1%80%D0%BC%D1%8B_%D0%BE%D0%B1%D1%80%D0%B0%D1%82%D0%BD%D0%BE%D0%B9_%D1%81%D0%B2%D1%8F%D0%B7%D0%B8&diff=9202Добавление информации в письма с формы обратной связи2019-05-17T15:29:14Z<p>Alelekov: </p>
<hr />
<div>'''Актуально для версии 20'''<br />
<br />
== Задача ==<br />
Передать из формы обратной связи какие-либо данные, которые нужны нам, но для пользователя не должны быть видны. <br />
<br />
== Решение ==<br />
Для примера мы рассмотрим добавление информации о домене, с которого была отправлена форма.<br />
<br />
<ul><br />
<li>1. Создаём в модуле "Шаблоны данных" в типе данных "Форма обратной связи" новую группу полей, назовём её "Дополнительная информация".</li><br />
<li>2. В созданной группе полей добавляем поле под названием "Информация", с идентификатором info и типом "Простой текст". Поле не должно быть видимым, поэтому галочку на "Видимое" мы не ставим:<br />
</li><br />
[[Файл:Info.png]]<br />
<li>3. Теперь нам нужно создать [http://api.docs.umi-cms.ru/razrabotka_nestandartnogo_funkcionala/sobytijnaya_model_umicms/naznachenie_obrabotchika_sobytiya/ обработчик события] создания сообщения [http://api.docs.umi-cms.ru/razrabotka_nestandartnogo_funkcionala/sobytijnaya_model_umicms/standartnye_tochki_vyzova/#sel=21:1,21:1 webforms_create_message]. Для этого создадим в папке '''~/classes/components/webforms''' файл custom_events.php и напишем там следующий код:<br />
<source lang="php"><br />
<?php<br />
new umiEventListener("webforms_post", "webforms", "onCreateMessage");<br />
?><br />
</source><br />
</li><br />
<li><br />
4. После того, как мы назначили обработчик, нам надо [http://api.docs.umi-cms.ru/razrabotka_nestandartnogo_funkcionala/sobytijnaya_model_umicms/pishem_obrabotchik_sobytiya/ написать его код]. Код нашего обработчика будет следующим:<br />
<source lang="php"><br />
public function onCreateMessage(iUmiEventPoint $oEventPoint)<br />
{ <br />
if ($oEventPoint->getMode() != "after") {<br />
return;<br />
}<br />
<br />
<br />
$id = $oEventPoint->getParam('messageId');<br />
$sel = new selector('objects');<br />
$sel->where('id')->equals($id);<br />
$res = $sel->result();<br />
<br />
$message = $res[0];<br />
$message->setValue('info', $_SERVER['SERVER_NAME']);<br />
$message->commit();<br />
}<br />
</source><br />
<br />
Этот код необходимо разместить в файле '''~/classes/components/webforms/customMacros.php'''<br />
В предпоследней строке кода мы присваиваем полю info какое-либо значение. В нашем примере это текущий домен, с которого отправлена форма, но Вы можете добавлять туда любое нужное Вам значение.<br />
</li><br />
<li>5. Все необходимые шаги выполнены, и теперь осталось только добавить вывод нашего поля info в письмах, которые приходят с формы. Для этого мы заходим в модуль "Конструктор форм", вкладка "Шаблоны писем" и выбираем нужный нам шаблон. В шаблоне нам нужно только прописать макрос для вывода поля - %info%. </li><br />
[[Файл:Template.png]]<br />
</ul><br />
<br><br />
На этом все необходимые действия завершены и теперь при отправке формы, помимо данных, введённых пользователем, мы будем получать какую-то дополнительную информацию, нужную нам.<br />
<br />
[[category:Модуль Обратная связь]]</div>Alelekovhttps://wiki.umisoft.ru/index.php?title=%D0%9F%D0%BE%D0%B2%D1%82%D0%BE%D1%80%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B7%D0%B0%D0%BA%D0%B0%D0%B7%D0%B0_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F(Demomarket)&diff=9193Повторение заказа пользователя(Demomarket)2019-05-16T15:20:07Z<p>Alelekov: </p>
<hr />
<div>'''Актуально для версии 20'''<br />
<br />
Иногда бывает необходимо повторить заказ, сделанный пользователем ранее. Мы рассмотрим реализацию данного функционала на примере шаблона Демомаркет.<br />
<br />
'''Задача:''' реализовать возможность повторения одного из заказов, сделанных пользователем ранее.<br />
<br />
'''Решение:'''<br />
<br />
В шаблоне "Демомаркет" в личном кабинете пользователя имеется вкладка "Заказы", на которой имеется вся необходимая нам информация о заказах, сделанных пользователем, включая товары и их количество. Для начала, добавим в файл шаблона этой страницы код, который позволит нам получить эти данные. <br />
<br />
1. Для отправки данных проще всего использовать тег [http://htmlbook.ru/html/form <form>]. Заключим в этот тег весь html-код в файле '''~/templates/demomarket/php/emarket/personal/order.phtml''': перед строкой <source lang="html"><div class="content_order"></source> добавим тег <source lang="html"><form method="post" action="/emarket/createSameOrder/"></source> и в конце файла добавим закрывающий тег </form>.<br />
<br><br />
2. Затем, добавим там, где нам нужно, кнопку "Повторить заказ", код: <source lang="html"><input type="submit" value="Повторить заказ"/></source><br />
для простоты примера мы добавили эту кнопку в самый конец файла перед закрывающим тегом </form>.<br />
<br />
3. Итак, у нас есть форма и возможность её отправки с помощью кнопки "Повторить заказ". Теперь нужно сформировать данные для отправки.<br />
После строки <source lang="html"><div class="content_order"><br />
</source> добавим следующий код:<br />
<source lang="php"><div><br />
<br />
<?php foreach ($order['items'] as $orderItem): ?> <br />
<?php <br />
$pageObject = $orderItem['page'];<br />
$amount = $orderItem['amount'];<br />
$values[$pageObject->id] = $amount;<br />
?><br />
<br />
<input hidden name="orderData" value="<?=base64_encode(serialize($values))?>"/><br />
<?php endforeach; ?><br />
</div></source><br />
С помощью этого кода мы получили идентификатор товара и его количество, а затем преобразовали это в массив вида "идентификатор товара => количество".<br />
Теперь по нажатию кнопки "повторить заказ" эти данные будут отправляться на обработку в макрос createSameOrder, который мы указали в атрибуте action у нашей формы.<br />
<br />
Результирующий код в этом файле будет вот таким:<br />
<source lang="html"><br />
<form method="post" action="/emarket/createSameOrder/"><br />
<div class="content_order"><br />
<div><br />
<br />
<?php foreach ($order['items'] as $orderItem): ?> <br />
<?php <br />
$pageObject = $orderItem['page'];<br />
$amount = $orderItem['amount'];<br />
$values[$pageObject->id] = $amount;<br />
?><br />
<br />
<input hidden name="orderData" value="<?=base64_encode(serialize($values))?>"/><br />
<?php endforeach; ?><br />
</div><br />
<br />
<div><br />
<div class="title_text hidden-md hidden-lg"><br />
<?= $this->translate('order_number') ?><br />
</div><br />
<br />
<div><?= $this->getOrderDateMessage($order) ?></div><br />
<br />
<?php foreach ($order['items'] as $orderItem): ?><br />
<div> <br />
<a href="<?= $this->getOrderItemProductUrl($orderItem) ?>"><br />
<?= $this->escape($orderItem['name']) ?><br />
</a><br />
</div><br />
<?php endforeach; ?><br />
</div><br />
<br />
<div><br />
<div class="title_text hidden-md hidden-lg"><br />
<?= $this->translate('order_sum') ?><br />
</div><br />
<br />
<div><?= $this->render($order['summary'], 'emarket/price') ?></div><br />
<br />
<?php foreach ($order['items'] as $orderItem): ?> <br />
<?= $this->render($orderItem, 'emarket/personal/order_item_price') ?><br />
<?php endforeach; ?><br />
</div><br />
<br />
<div><br />
<div class="title_text hidden-md hidden-lg"><br />
<?= $this->translate('order_status') ?><br />
</div><br />
<br />
<div><?= $this->getOrderStatusMessage($order) ?></div><br />
</div><br />
<br />
<div><br />
<div class="title_text hidden-md hidden-lg"><br />
<?= $this->translate('order_method') ?><br />
</div><br />
<br />
<div><br />
<?php if ($invoiceLink): ?><br />
<a href="<?= $invoiceLink ?>" target="__blank"><br />
<?= $order['payment_name'] ?><br />
</a><br />
<?php else: ?><br />
<?= $order['payment_name'] ?><br />
<?php endif; ?><br />
</div><br />
</div><br />
</div><br />
<input type="submit" value="Повторить заказ"/><br />
</form><br />
</source><br />
<br />
4. Теперь опишем необходимый код для формирования заказа с такими же товарами и в таком же количестве. В файле '''~/classes/components/emarket/customMacros.php''' напишем следующий код:<br />
<br />
<source lang="php"><br />
public function createSameOrder()<br />
{<br />
// Получили преобразованный массив с данными<br />
$serializedData = $_POST['orderData'];<br />
// Преобразовали его в нужный нам вид<br />
$originalData = unserialize(base64_decode($serializedData));<br />
<br />
// Для того, чтобы не было перенаправлений при добавлении товара в корзину, ставим флаг no-redirect<br />
$_REQUEST['no-redirect'] = true;<br />
// Получаем ключи - идентификаторы товара<br />
$keys = array_keys($originalData); <br />
foreach($keys as $key)<br />
{<br />
// Идентификатор товара<br />
$id = $key;<br />
// Количество товара<br />
$amount = $originalData[$key];<br />
// Добавляем товар в корзину amount раз<br />
for($i = 0; $i < $amount; $i++)<br />
{<br />
// Метод добавления товара в корзину<br />
$this->module->basket('put', 'element', $id);<br />
}<br />
}<br />
<br />
// После того как заказ сформирован автоматически начинаем оформление заказа<br />
$this->module->redirect('/emarket/purchase');<br />
} <br />
</source><br />
<br />
Чтобы наш макрос мог быть вызван обычными пользователями, добавим соответствующие записи о нём в файл '''~/classes/components/emarket/permissions.custom.php''':<br />
<source lang="php"><br />
$permissions = [<br />
/** Права на личный кабинет покупателя */<br />
'personal' => [ <br />
'createsameorder'<br />
] <br />
];<br />
</source><br />
<br />
На этом все необходимые действия заканчиваются. Теперь при нажатии кнопки "Повторить заказ" в личном кабинете пользователя около соответствующего заказа будет происходить следующее:<br />
<ul><br />
<li>1. Формируются данные о товаре и его количестве</li><br />
<li>2. Сформированные данные отправляются на обработку в метод createSameOrder</li><br />
<li>3. В этом методе формируется новый заказ с аналогичными товарами и их количеством</li><br />
<li>4. Как только заказ сформирован - происходит переход на страницу начала процесса оформления заказа </li><br />
</ul><br />
[[category:Модуль Интернет магазин]]</div>Alelekovhttps://wiki.umisoft.ru/index.php?title=%D0%9F%D0%BE%D0%B2%D1%82%D0%BE%D1%80%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B7%D0%B0%D0%BA%D0%B0%D0%B7%D0%B0_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F(Demomarket)&diff=9192Повторение заказа пользователя(Demomarket)2019-05-16T15:08:55Z<p>Alelekov: </p>
<hr />
<div>'''Актуально для версии 20'''<br />
<br />
Иногда бывает необходимо повторить заказ, сделанный пользователем ранее. Мы рассмотрим реализацию данного функционала на примере шаблона Демомаркет.<br />
<br />
'''Задача:''' реализовать возможность повторения одного из заказов, сделанных пользователем ранее.<br />
<br />
'''Решение:'''<br />
<br />
В шаблоне "Демомаркет" в личном кабинете пользователя имеется вкладка "Заказы", на которой имеется вся необходимая нам информация о заказах, сделанных пользователем, включая товары и их количество. Для начала, добавим в файл шаблона этой страницы код, который позволит нам получить эти данные. <br />
<br />
1. Для отправки данных проще всего использовать тег [http://htmlbook.ru/html/form <form>]. Заключим в этот тег весь html-код в файле '''~/templates/demomarket/php/emarket/personal/order.phtml''': перед строкой <source lang="html"><div class="content_order"></source> добавим тег <source lang="html"><form method="post" action="/emarket/createSameOrder/"></source> и в конце файла добавим закрывающий тег </form>.<br />
<br><br />
2. Затем, добавим там, где нам нужно, кнопку "Повторить заказ", код: <source lang="html"><input type="submit" value="Повторить заказ"/></source><br />
для простоты примера мы добавили эту кнопку в самый конец файла перед закрывающим тегом </form>.<br />
<br />
3. Итак, у нас есть форма и возможность её отправки с помощью кнопки "Повторить заказ". Теперь нужно сформировать данные для отправки.<br />
После строки <source lang="html"><div class="content_order"><br />
</source> добавим следующий код:<br />
<source lang="php"><div><br />
<br />
<?php foreach ($order['items'] as $orderItem): ?> <br />
<?php <br />
$pageObject = $orderItem['page'];<br />
$amount = $orderItem['amount'];<br />
$values[$pageObject->id] = $amount;<br />
?><br />
<br />
<input hidden name="orderData" value="<?=base64_encode(serialize($values))?>"/><br />
<?php endforeach; ?><br />
</div></source><br />
С помощью этого кода мы получили идентификатор товара и его количество, а затем преобразовали это в массив вида "идентификатор товара => количество".<br />
Теперь по нажатию кнопки "повторить заказ" эти данные будут отправляться на обработку в макрос createSameOrder, который мы указали в атрибуте action у нашей формы.<br />
<br />
Результирующий код в этом файле будет вот таким:<br />
<source lang="html"><br />
<form method="post" action="/emarket/createSameOrder/"><br />
<div class="content_order"><br />
<div><br />
<br />
<?php foreach ($order['items'] as $orderItem): ?> <br />
<?php <br />
$pageObject = $orderItem['page'];<br />
$amount = $orderItem['amount'];<br />
$values[$pageObject->id] = $amount;<br />
?><br />
<br />
<input hidden name="orderData" value="<?=base64_encode(serialize($values))?>"/><br />
<?php endforeach; ?><br />
</div><br />
<br />
<div><br />
<div class="title_text hidden-md hidden-lg"><br />
<?= $this->translate('order_number') ?><br />
</div><br />
<br />
<div><?= $this->getOrderDateMessage($order) ?></div><br />
<br />
<?php foreach ($order['items'] as $orderItem): ?><br />
<div> <br />
<a href="<?= $this->getOrderItemProductUrl($orderItem) ?>"><br />
<?= $this->escape($orderItem['name']) ?><br />
</a><br />
</div><br />
<?php endforeach; ?><br />
</div><br />
<br />
<div><br />
<div class="title_text hidden-md hidden-lg"><br />
<?= $this->translate('order_sum') ?><br />
</div><br />
<br />
<div><?= $this->render($order['summary'], 'emarket/price') ?></div><br />
<br />
<?php foreach ($order['items'] as $orderItem): ?> <br />
<?= $this->render($orderItem, 'emarket/personal/order_item_price') ?><br />
<?php endforeach; ?><br />
</div><br />
<br />
<div><br />
<div class="title_text hidden-md hidden-lg"><br />
<?= $this->translate('order_status') ?><br />
</div><br />
<br />
<div><?= $this->getOrderStatusMessage($order) ?></div><br />
</div><br />
<br />
<div><br />
<div class="title_text hidden-md hidden-lg"><br />
<?= $this->translate('order_method') ?><br />
</div><br />
<br />
<div><br />
<?php if ($invoiceLink): ?><br />
<a href="<?= $invoiceLink ?>" target="__blank"><br />
<?= $order['payment_name'] ?><br />
</a><br />
<?php else: ?><br />
<?= $order['payment_name'] ?><br />
<?php endif; ?><br />
</div><br />
</div><br />
</div><br />
<input type="submit" value="Повторить заказ"/><br />
</form><br />
</source><br />
<br />
4. Теперь опишем необходимый код для формирования заказа с такими же товарами и в таком же количестве. В файле '''~/classes/components/emarket/customMacros.php''' напишем следующий код:<br />
<br />
<source lang="php"><br />
public function createSameOrder()<br />
{<br />
// Получили преобразованный массив с данными<br />
$serializedData = $_POST['orderData'];<br />
// Преобразовали его в нужный нам вид<br />
$originalData = unserialize(base64_decode($serializedData));<br />
<br />
// Для того, чтобы не было перенаправлений при добавлении товара в корзину, ставим флаг no-redirect<br />
$_REQUEST['no-redirect'] = true;<br />
// Получаем ключи - идентификаторы товара<br />
$keys = array_keys($originalData); <br />
foreach($keys as $key)<br />
{<br />
// Идентификатор товара<br />
$id = $key;<br />
// Количество товара<br />
$amount = $originalData[$key];<br />
// Добавляем товар в корзину amount раз<br />
for($i = 0; $i < $amount; $i++)<br />
{<br />
// Метод добавления товара в корзину<br />
$this->module->basket('put', 'element', $id);<br />
}<br />
}<br />
<br />
// После того как заказ сформирован автоматически начинаем оформление заказа<br />
$this->module->redirect('/emarket/purchase');<br />
} <br />
</source><br />
<br />
На этом все необходимые действия заканчиваются. Теперь при нажатии кнопки "Повторить заказ" в личном кабинете пользователя около соответствующего заказа будет происходить следующее:<br />
<ul><br />
<li>1. Формируются данные о товаре и его количестве</li><br />
<li>2. Сформированные данные отправляются на обработку в метод createSameOrder</li><br />
<li>3. В этом методе формируется новый заказ с аналогичными товарами и их количеством</li><br />
<li>4. Как только заказ сформирован - происходит переход на страницу начала процесса оформления заказа </li><br />
</ul><br />
[[category:Модуль Интернет магазин]]</div>Alelekovhttps://wiki.umisoft.ru/index.php?title=%D0%9F%D0%BE%D0%B2%D1%82%D0%BE%D1%80%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B7%D0%B0%D0%BA%D0%B0%D0%B7%D0%B0_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F(Demomarket)&diff=9191Повторение заказа пользователя(Demomarket)2019-05-16T15:02:45Z<p>Alelekov: Новая страница: «'''Актуально для версии 20''' Иногда бывает необходимо повторить заказ, сделанный пользова…»</p>
<hr />
<div>'''Актуально для версии 20'''<br />
<br />
Иногда бывает необходимо повторить заказ, сделанный пользователем ранее. Мы рассмотрим реализацию данного функционала на примере шаблона Демомаркет.<br />
<br />
'''Задача:''' реализовать возможность повторения одного из заказов, сделанных пользователем ранее.<br />
<br />
'''Решение:'''<br />
<br />
В шаблоне "Демомаркет" в личном кабинете пользователя имеется вкладка "Заказы", на которой имеется вся необходимая нам информация о заказах, сделанных пользователем, включая товары и их количество. Для начала, добавим в файл шаблона этой страницы код, который позволит нам получить эти данные. <br />
<br />
1. Для отправки данных проще всего использовать тег [http://htmlbook.ru/html/form <form>]. Заключим в этот тег весь html-код в файле '''~/templates/demomarket/php/emarket/personal/order.phtml''': перед строкой <source lang="html"><div class="content_order"></source> добавим тег <source lang="html"><form method="post" action="/emarket/createSameOrder/"></source> и в конце файла добавим закрывающий тег </form>.<br />
<br><br />
2. Затем, добавим там, где нам нужно, кнопку "Повторить заказ", код: <source lang="html"><input type="submit" value="Повторить заказ"/></source><br />
для простоты примера мы добавили эту кнопку в самый конец файла перед закрывающим тегом </form>.<br />
<br />
3. Итак, у нас есть форма и возможность её отправки с помощью кнопки "Повторить заказ". Теперь нужно сформировать данные для отправки.<br />
После строки <source lang="html"><div class="content_order"><br />
</source> добавим следующий код:<br />
<source lang="php"><div><br />
<br />
<?php foreach ($order['items'] as $orderItem): ?> <br />
<?php <br />
$pageObject = $orderItem['page'];<br />
$amount = $orderItem['amount'];<br />
$values[$pageObject->id] = $amount;<br />
?><br />
<br />
<input hidden name="orderData" value="<?=base64_encode(serialize($values))?>"/><br />
<?php endforeach; ?><br />
</div></source><br />
С помощью этого кода мы получили идентификатор товара и его количество, а затем преобразовали это в массив вида идентификатор товара => количество.<br />
Теперь по нажатию кнопки "повторить заказ" эти данные будут отправляться на обработку в макрос createSameOrder, который мы указали в атрибуте action у нашей формы.<br />
<br />
4. Теперь опишем необходимый код для формирования заказа с такими же товарами и в таком же количестве. В файле '''~/classes/components/emarket/customMacros.php''' напишем следующий код:<br />
<br />
<source lang="php"><br />
public function createSameOrder()<br />
{<br />
// Получили преобразованный массив с данными<br />
$serializedData = $_POST['orderData'];<br />
// Преобразовали его в нужный нам вид<br />
$originalData = unserialize(base64_decode($serializedData));<br />
<br />
// Для того, чтобы не было перенаправлений при добавлении товара в корзину, ставим флаг no-redirect<br />
$_REQUEST['no-redirect'] = true;<br />
// Получаем ключи - идентификаторы товара<br />
$keys = array_keys($originalData); <br />
foreach($keys as $key)<br />
{<br />
// Идентификатор товара<br />
$id = $key;<br />
// Количество товара<br />
$amount = $originalData[$key];<br />
// Добавляем товар в корзину amount раз<br />
for($i = 0; $i < $amount; $i++)<br />
{<br />
// Метод добавления товара в корзину<br />
$this->module->basket('put', 'element', $id);<br />
}<br />
}<br />
<br />
// После того как заказ сформирован автоматически начинаем оформление заказа<br />
$this->module->redirect('/emarket/purchase');<br />
} <br />
</source><br />
<br />
На этом все необходимые действия заканчиваются. Теперь при нажатии кнопки "Повторить заказ" в личном кабинете пользователя около соответствующего заказа будет происходить следующее:<br />
1. Формируются данные о товаре и его количестве<br />
2. Сформированные данные отправляются на обработку в метод createSameOrder<br />
3. В этом методе формируется новый заказ с аналогичными товарами и их количеством<br />
4. Как только заказ сформирован - происходит переход на страницу начала процесса оформления заказа <br />
<br />
[[category:Модуль Интернет магазин]]</div>Alelekovhttps://wiki.umisoft.ru/index.php?title=%D0%94%D0%BE%D0%B1%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%86%D0%B8%D0%B8_%D0%B2_%D0%BF%D0%B8%D1%81%D1%8C%D0%BC%D0%B0_%D1%81_%D1%84%D0%BE%D1%80%D0%BC%D1%8B_%D0%BE%D0%B1%D1%80%D0%B0%D1%82%D0%BD%D0%BE%D0%B9_%D1%81%D0%B2%D1%8F%D0%B7%D0%B8&diff=9190Добавление информации в письма с формы обратной связи2019-05-15T15:33:04Z<p>Alelekov: </p>
<hr />
<div>'''Актуально для версии 20'''<br />
<br />
Иногда возникают ситуации, когда нам необходимо передать из формы обратной связи какие-либо данные, которые нужны нам, но для пользователя не должны быть видны. Для примера мы рассмотрим добавление информации о домене, с которого была отправлена форма.<br />
<br />
<ul><br />
<li>1. Создаём в модуле "Шаблоны данных" в типе данных "Форма обратной связи" новую группу полей, назовём её "Дополнительная информация".</li><br />
<li>2. В созданной группе полей добавляем поле под названием "Информация", с идентификатором info и типом "Простой текст". Поле не должно быть видимым, поэтому галочку на "Видимое" мы не ставим:<br />
</li><br />
[[Файл:Info.png]]<br />
<li>3. Теперь нам нужно создать [http://api.docs.umi-cms.ru/razrabotka_nestandartnogo_funkcionala/sobytijnaya_model_umicms/naznachenie_obrabotchika_sobytiya/ обработчик события] отправки сообщения [http://api.docs.umi-cms.ru/razrabotka_nestandartnogo_funkcionala/sobytijnaya_model_umicms/standartnye_tochki_vyzova/#sel=20:164,20:164 webforms_post]. Для этого создадим в папке '''~/classes/components/webforms''' файл custom_events.php и напишем там следующий код:<br />
<source lang="php"><br />
<?php<br />
new umiEventListener("webforms_post", "webforms", "onSendMessage");<br />
?><br />
</source><br />
</li><br />
<li><br />
4. После того, как мы назначили обработчик, нам надо [http://api.docs.umi-cms.ru/razrabotka_nestandartnogo_funkcionala/sobytijnaya_model_umicms/pishem_obrabotchik_sobytiya/ написать его код]. Код нашего обработчика будет следующим:<br />
<source lang="php"><br />
public function onSendMessage(iUmiEventPoint $oEventPoint)<br />
{ <br />
$id = $oEventPoint->getParam('message_id');<br />
$sel = new selector('objects');<br />
$sel->where('id')->equals($id);<br />
$res = $sel->result();<br />
<br />
$message = $res[0];<br />
$message->setValue('info', $_SERVER['SERVER_NAME']);<br />
$message->commit();<br />
}<br />
</source><br />
<br />
Этот код необходимо разместить в файле '''~/classes/components/webforms/customMacros.php'''<br />
В предпоследней строке кода мы присваиваем полю info какое-либо значение. В нашем примере это текущий домен, с которого отправлена форма, но Вы можете добавлять туда любое нужное Вам значение.<br />
</li><br />
<li>5. Все необходимые шаги выполнены, и теперь осталось только добавить вывод нашего поля info в письмах, которые приходят с формы. Для этого мы заходим в модуль "Конструктор форм", вкладка "Шаблоны писем" и выбираем нужный нам шаблон. В шаблоне нам нужно только прописать макрос для вывода поля - %info%. </li><br />
[[Файл:Template.png]]<br />
</ul><br />
<br><br />
На этом все необходимые действия завершены и теперь при отправке формы, помимо данных, введённых пользователем, мы будем получать какую-то дополнительную информацию, нужную нам.<br />
<br />
[[category:Модуль Обратная связь]]</div>Alelekovhttps://wiki.umisoft.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Template.png&diff=9189Файл:Template.png2019-05-15T15:32:51Z<p>Alelekov: </p>
<hr />
<div></div>Alelekovhttps://wiki.umisoft.ru/index.php?title=%D0%94%D0%BE%D0%B1%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%86%D0%B8%D0%B8_%D0%B2_%D0%BF%D0%B8%D1%81%D1%8C%D0%BC%D0%B0_%D1%81_%D1%84%D0%BE%D1%80%D0%BC%D1%8B_%D0%BE%D0%B1%D1%80%D0%B0%D1%82%D0%BD%D0%BE%D0%B9_%D1%81%D0%B2%D1%8F%D0%B7%D0%B8&diff=9188Добавление информации в письма с формы обратной связи2019-05-15T15:30:09Z<p>Alelekov: </p>
<hr />
<div>'''Актуально для версии 20'''<br />
<br />
Иногда возникают ситуации, когда нам необходимо передать из формы обратной связи какие-либо данные, которые нужны нам, но для пользователя не должны быть видны. Для примера мы рассмотрим добавление информации о домене, с которого была отправлена форма.<br />
<br />
<ul><br />
<li>1. Создаём в модуле "Шаблоны данных" в типе данных "Форма обратной связи" новую группу полей, назовём её "Дополнительная информация".</li><br />
<li>2. В созданной группе полей добавляем поле под названием "Информация", с идентификатором info и типом "Простой текст". Поле не должно быть видимым, поэтому галочку на "Видимое" мы не ставим:<br />
</li><br />
[[Файл:Info.png]]<br />
<li>3. Теперь нам нужно создать [http://api.docs.umi-cms.ru/razrabotka_nestandartnogo_funkcionala/sobytijnaya_model_umicms/naznachenie_obrabotchika_sobytiya/ обработчик события] отправки сообщения [http://api.docs.umi-cms.ru/razrabotka_nestandartnogo_funkcionala/sobytijnaya_model_umicms/standartnye_tochki_vyzova/#sel=20:164,20:164 webforms_post]. Для этого создадим в папке '''~/classes/components/webforms файл custom_events.php''' и напишем там следующий код:<br />
<source lang="php"><br />
<?php<br />
new umiEventListener("webforms_post", "webforms", "onSendMessage");<br />
?><br />
</source><br />
</li><br />
<li><br />
4. После того, как мы назначили обработчик, нам надо [http://api.docs.umi-cms.ru/razrabotka_nestandartnogo_funkcionala/sobytijnaya_model_umicms/pishem_obrabotchik_sobytiya/ написать его код]. Код нашего обработчика будет следующим:<br />
<source lang="php"><br />
public function onSendMessage(iUmiEventPoint $oEventPoint)<br />
{ <br />
$id = $oEventPoint->getParam('message_id');<br />
$sel = new selector('objects');<br />
$sel->where('id')->equals($id);<br />
$res = $sel->result();<br />
<br />
$message = $res[0];<br />
$message->setValue('info', $_SERVER['SERVER_NAME']);<br />
$message->commit();<br />
}<br />
</source><br />
<br />
Этот код необходимо разместить в файле '''~/classes/components/webforms/customMacros.php'''<br />
В предпоследней строке кода мы присваиваем полю info какое-либо значение. В нашем примере это текущий домен, с которого отправлена форма, но Вы можете добавлять туда любое нужное Вам значение.<br />
</li><br />
<li>5. Все необходимые шаги выполнены, и теперь осталось только добавить вывод нашего поля info в письмах, которые приходят с формы. Для этого мы заходим в модуль "Конструктор форм", вкладка "Шаблоны писем" и выбираем нужный нам шаблон. В шаблоне нам нужно только прописать макрос для вывода поля - %info%. </li><br />
</ul><br />
<br><br />
На этом все необходимые действия завершены и теперь при отправке формы, помимо данных, введённых пользователем, мы будем получать какую-то дополнительную информацию, нужную нам.<br />
<br />
[[category:Модуль Обратная связь]]</div>Alelekov