Последние темы


Готовая сборка modx 2.5.0 + shopkeeper3 (обновленная)

  • Все привет. Пару месяцев назад выложил сборочку.
    Сегодня вот выкладываю обновленную версию.
    Для начала о приятном, та первая никуда не денется, так и будет висеть можете качать)
    А теперь о менее приятном, эта будет платной (256р).

    После установки будут установлены компоненты:

    • Ace
      Изменена тема на monokai (системная настройка ace.theme)

    • AjaxForm
      Изменил внешний вид уведомлений jgrowl, в файле assets/components/ajaxform/css/default.css
      Пример можно посмотреть в демо версии сайта, если нажать на кнопку отправить в форме обратной связи. CSS такой:

    #jGrowl > [class*="message-error"] {
        background: #CC4141 !important;
        color: #FDFDFD!important;
        border-radius: 0px!important;
        border: 0px!important;
    }
    ...
    
    • ClientConfig
      Будут созданы три вкладки и несколько параметров.

    • Collections
      Добавлен новый рендер imageresoursegallery, он правда не супер пупер, в обновлениях поправлю. Нужен он для вывода изображения товара.

    • Formit
      Изменены значение словарей, теперь вместо formit, в Приложения -> Формы обратной связи. Что конкретно поменялось, можно посмотреть в управлении словарями, там выделено зелененьким.

    • Frontendmanager
      Изменен стандартный чанк tpl.frontendmanager.panel добавлен вывод полезной информации.

    • MIGx
      resourcegallery. Этой штукой добавляются изображения к товарам.
      resourceslider. Пока ни где не используется. Если хотите, можно вывести слайдер на главной странице к примеру. Заметка 1 Заметка 2

    • Minifyx
      Сжимаем все скрипты нашего шаблона в один файл. Вызывается в чанке meta

    • ModDevTools
      Ускоряет разработку немного) Само приложение перенесено, находиться Управление -> ModDevTools

    • pdoTools
      Набор сниппетов

    • phpthumbon
      Оптимизированный сниппет phpThumbOf под MODX Revolution для работы с изображениями

    • Refreshcache
      Чтобы не бегать по страницам самому для генерации кеша. Перенесено ближе к очистке кеша.

    • SeoPro
      Для сеошников

    • SeoTab
      Генерирует sitemap, 301 редиректы и еще кое-что

    • TinymceRTE
      html редактор для юзверей
      Системная настройка tinymcerte.browser_spellcheck стоит на "Да". Чтобы подсвечивались ошибки. А в файле assets/components/tinymcerte/js/mgr/tinymcerte.js добавлено нескольок строк -
      verify_html отключение очистки кода
      theme_advanced_resizing_use_cookie для корректной вставки изображений.

    • translit
      Для чпу урлов

    • getPage
      Для пагинации в каталоге. Имеется связанный набор параметров catalogFilters

    • getProducts
      Для вывода списка ресурсов (товаров)

    • Login
      Регистрация, авторизация и личный кабинет пользователя. Добавлен сниппет userPhoto для загрузки аватарки пользователя.

    • shopkeeper3
      Два набора параметров shk3.property_sets = miniBasket,cartOrderPage

    • tagManager2
      Измененные системные настройки:
      tag_mgr2.numeric - price,oldprice
      tag_mgr2.prod_templates - 3
      tag_mgr2.propertySetName - catalogFilters

    • Tickets + Jevix
      Для организации отзывов.

    • compare
      Сравнение товаров, при необходимости можно переделать в список избранного.

    • giftcards
      Подарочные карты и скидки интернет магазина.

    • msearch1
      Организация поиска по товарам.

    Изменяться системные настройки:

    • emailsender - Нужно будет указать email сайта
    • emailsubject - Нужно будет указать название сайта
    • forgot_login_email, signupemail_message, webpwdreminder_message, websignupemail_message - Переведено на русский
    • use_editor - Да
    • which_editor - TinyMCE RTE
    • which_element_editor - Ace
    • friendly_alias_translit - russian
    • friendly_urls - Да
    • use_alias_path - Да
    • locale - ru_RU.UTF8
    • default_media_source - 2 (images)
    • manager_favicon_url - templates/default/images/modx-icon-color.png
    • manager_week_start - 1
    • mgr_source_icon - icon-folder-open-o
    • resource_tree_node_name - pagetitle
    • resource_tree_node_name_fallback - pagetitle
    • resource_tree_node_tooltip - alias
    • richtext_default - Да
    • error_page - 5
    • site_name - Нужно свое
    • site_unavailable_message - Сайт недоступен
    • unauthorized_page - 6

    Создастся профиль в настройке форм:
    Будет один профиль (All) который изменяет заголовки ресурсов при создании и обновлении.

    • longtitle - Расширенный заголовок (title)
    • description - Описание (description)
    • introtext - Ключевые слова (keywords)

    Контроль доступа, политики доступа, группы ресурсов:
    Создана политика доступа Manager на основе Administrator, разрешения и запреты описывать не буду, очень много. Так же создана роль Manager. Ну и собственно группа пользователей Manager. Еще добавиться политика доступа "Пользователи" и такая же группа ресурсов. В группу ресурсов "Пользователи" входят страницы:

    • Личный кабинет (9)
    • Изменение пароля (13)
    • Редактировать профиль (14)
    • Мои комментарии (15)

    Пользователи
    Всего два пользователя admin и manager
    Сразу после установки сборки, ваш старый пароль админа затрется и будет admin123. Его нужно будет поменять, как и email
    Второй пользователь Manager, по умолчанию будет заблокирован, пароль у него manager123.
    А те кто регистрируется на сайте сразу попадут в группу "Пользователи"

    Наборы параметров:

    • cartOrderPage - Набор параметров для страницы корзины (связан с shopkeeper3)
    • miniBasket - Набор параметров для маленькой корзины (связан с shopkeeper3)
    • catalogFilters - Набор параметров для фильтрации товаров в каталоге (связан с getPage)
    • catalogFiltersAjax - Набор параметров для фильтрации товаров в каталоге с pdoPage (связан с pdoPage)

    По умолчанию фильтрация товаров в каталоге настроена с catalogFilters. Но тут переписывался @fatijio и он спрашивал про pdoPage.
    Если хотите настроить пагинацию загрузкой по кнопке:
    В шаблоне "Категория(2)" поменять это:

    <div class="row" id="products">
       [[!tmCatalog]]
    </div>
    <ul class="pagination ">
       [[!+page.nav]]
    </ul>
    
    

    на это:

    <div id="pdopage"> 
       [[!+page.nav]]
       <div class="rows">
          <div class="row" id="products">
             [[!tmCatalog]]
          </div>
       </div>
    </div>
    

    Открыть системные настройки и изменить:

    • tag_mgr2.propertySetName - catalogFiltersAjax
    • tag_mgr2.propertySetSnippet - pdoPage

    Теперь если взглянуть на каталог, там есть кнопка)

    Ресурсы:

    • Главная
    • Каталог
    • Категория 1
    • Товар 1
    • Товар 2
    • Товар 3
    • Корзина
    • Спасибо за заказ
    • Личный кабинет
    • Изменение пароля
    • Редактировать профиль
    • Мои комментарии
    • Сравнение товаров
    • Технические страницы
    • Карта сайта
    • robots.txt
    • Страница не найдена 404
    • Доступ запрещен 403
    • Поиск
    • Регистрация
    • Подтверждение регистрации
    • Авторизация
    • Восстановление пароля
    • Сброс пароля

    Источники файлов:

    • Filesystem - Основной каталог системы
    • Images - Каталог с изображениями
    • Product images - Каталог с изображениями загружаемые с помощью migx (выше заметка).

    Шаблоны:

    • Главная
    • Категория (вызывается tagmanager2)
    • Пользователь (все что связано с пользователем, авторизация, регистрация, личный кабинет)
    • Товар

    Дополнительные поля:

    • gallery (Изображения). Изображения для товаров с помощью конфигурации MIGx resourcegallery.
    • price (Цена)
    • oldprice (Старая цена)
    • params (Параметры)
    • tags (Метки)

    Чанки:

    • menu (Главное меню сайта) - меню генерируется с помощью pdoMenu
    • meta (Мета теги из head и MinifyX)
    • footer (Подвал) - выводит ссылки на соц сети, текущий год, и пример вызова AjaxForm + Formit
      Ну все от компонентов соответственно.

    Как установить?
    Так же как и предыдущую сборку.

    • Архив shopkeeper3.tpl.zip закачать на сервер и распаковать. Открыть http://АДРЕС_ВАШЕГО_САЙТА/setup
    • Далее следовать инструкциям по установке modx ВАЖНО! В конце установки СНЯТЬ галочку "Отметьте этот пункт, чтобы удалить каталог и файлы программы установки с вашего сервера (рекомендуется)."
    • Логинимся. идем в Приложения->Установщик. Ищем пакеты локально и устанавливаем shopkeeper3_pitrooo_ru
    • Открыть http://АДРЕС_ВАШЕГО_САЙТА/setup и провести установку в режиме обновления. В конце оставить галочку на удаление каталога и файлов программы установки, они больше не понадобятся.
    • Открыть http://АДРЕС_ВАШЕГО_САЙТА/manager залогиниться Пользователь: admin пароль: admin123.

    Если в каталоге и на странице товара не отображаются изображения:
    Открыть в верхнем меню: Медиа -> Источники файлов -> правой кнопкой по источнику файлов Product images -> Редактировать. В basePath и baseUrl добавить значение:

    [[!migxResourceMediaPath? &pathTpl=`assets/images/product/{id}/` &createFolder=`1` ]]
    

    Потом почистить кэш.

    Демо так будет после установки)
    Купить тут там внизу форма (256 рупий)

  • @pitrooo сказал Готовая сборка modx 2.5.0 + shopkeeper3 (обновленная):

    userPhoto

    Чуть позже опробую.
    То что сейчас бросилось в глаза, мини корзина и 2 одинаковые ссылки, что по тотал прайс что по оформить попадаем на /cart.
    Может есть смысл price_total сделать не кликабельной?
    В карточке товара tp_refresh висит непонятно где.(на скриншоте справа с краю экрана)
    0_1473045634932_2016-09-05_06-19-49.png
    В карточке товара вкладка пользователя становится не активной. можно только выйти, как и в сравнении и в корзине.
    От себя пожелание, в карточку товара добавить блок иконок поделиться в соц. сетях.
    И раз уж migx настроен под слайдер, в качестве примера-образца хотелось бы видеть 2-3 слайда на главной.

    Пока что все. После покупки и тестирования отпишусь еще.

  • @LoGruS
    Про 2 одинаковые ссылки:
    В первой версии было две страницы, одна корзина (с содержимым) а вторая ссылка на оформление заказа, но в этой сборке страница оформления и корзина на одной странице, поэтому две одинаковые. Поправил.
    tp_refresh:
    Это от tickets, она там по умолчанию висит, если есть новые комментарии к товару там будет циферка о количестве.
    Вкладка пользователя:
    Поправил, выводил название так: [[#10.pagetitle]]. И почему-то если пользователь залогинен в web то тег не обрабатывается. Смотреть и что да как не стал, просто поменял на текст.

    Соц. сети и слайдер добавлю.

  • 256р
    

    Ммм, какая красивая круглая цифра

  • @LoGruS Добавил слайдер. Кнопки соц сетей добавлять не стал, есть отдельные компоненты вроде. Если без них, то можно так:

    <ul class="utility-icons social-icons social-icons-colored">
        <li class="vk"><a href="[[~[[*id]]]]" onclick="Share.vkontakte('[[++site_url]][[*uri]]','[[*longtitle:replace=`"==`]]','[[++site_url]][[*image]]','[[*description:replace=`"==`]]')"><i class="fa fa-vk"></i></a></li>
        <li class="odnoklassniki"><a href="[[~[[*id]]]]" onclick="Share.odnoklassniki('[[++site_url]][[*uri]]','[[*description:replace=`"==`]]')" ><i class="fa fa-odnoklassniki"></i></a></li>
    	<li class="facebook"><a href="[[~[[*id]]]]" onclick="Share.facebook('[[++site_url]][[*uri]]','[[*longtitle:replace=`"==`]]','[[++site_url]][[*image]]','[[*description:replace=`"==`]]')"><i class="fa fa-facebook"></i></a></li>
    	<li class="twitter"><a href="[[~[[*id]]]]" onclick="Share.twitter('[[++site_url]][[*uri]]','[[*longtitle:replace=`"==`]]')" ><i class="fa fa-twitter"></i></a></li>
    </ul>
    

    Только замени плейсхолдеры если вызываешь не на странице. Ну и конкретно для этой сборки вместо [[*image]] :

    [[getImageList?&tvname=`gallery`&tpl=`@CODE: [[+image]]`&limit=`1`]]
    

    И добавить на страницу js

    jQuery(document).ready(function() {
            Share = {
                vkontakte: function(purl, ptitle, pimg, text) {
                	url  = 'http://vkontakte.ru/share.php?';
            		url += 'url='          + encodeURIComponent(purl);
            		url += '&title='       + encodeURIComponent(ptitle);
            		url += '&description=' + encodeURIComponent(text);
            		url += '&image='       + encodeURIComponent(pimg);
            		url += '&noparse=true';
            		Share.popup(url);
            	},
            	odnoklassniki: function(purl, text) {
            		url  = 'http://www.odnoklassniki.ru/dk?st.cmd=addShare&st.s=1';
            		url += '&st.comments=' + encodeURIComponent(text);
            		url += '&st._surl='    + encodeURIComponent(purl);
            		Share.popup(url);
            	},
            	facebook: function(purl, ptitle, pimg, text) {
            		url  = 'http://www.facebook.com/sharer.php?s=100';
            		url += '&p[title]='     + encodeURIComponent(ptitle);
            		url += '&p[summary]='   + encodeURIComponent(text);
            		url += '&p[url]='       + encodeURIComponent(purl);
            		url += '&p[images][0]=' + encodeURIComponent(pimg);
            		Share.popup(url);
            	},
            	twitter: function(purl, ptitle) {
            		url  = 'http://twitter.com/share?';
            		url += 'text='      + encodeURIComponent(ptitle);
            		url += '&url='      + encodeURIComponent(purl);
            		url += '&counturl=' + encodeURIComponent(purl);
            		Share.popup(url);
            	},
            
            	popup: function(url) {
            		window.open(url,'','toolbar=0,status=0,width=626,height=436');
            	}
            };
    });
    
  • @pitrooo При уменьшении размера монитора или на телефоне картинка на слайдере искажается, это просто картинка не в размер или другая причина?
    0_1473358070764_пост2.png

  • @Olika Не заданы стили, сборка рассчитана на то, что будет прикручен другой дизайн к ней, а этот будет удален.

  • Неплохо так.А оформление заказа formit? Ajax прикрутить нельзя?

  • Скажите, а компоненты отдельно обновляются или только полностью сборкой?

  • @astrodeep Всмысле?

  • @slaad Отдельно конечно, эта сборка просто устанавливает все компоненты и необходимые настройки, плюс еще кучу всего. По сути, после установки, получишь сайт, каким бы он был, если бы ты сам его настраивал.

  • @pitrooo я поставил все по инструкции, хостинг (hostinger&beget). Кроме главной страницы ничего не открывается! Все ведет на сайт 404 хостинга. Перечитал док по установке и настройке, ничего не нашел про это. Что надо настроить послу установки????

  • @slad дружище помоги плиз

  • @shahin89 Добрый день, я эту сборку не устанавливал.
    Вы перенос по инструкции сделали? Т.е. все конфиги поправили, кеш почистили, права на папки поставили?

    Если да, проверьте логи сервера и обращайтесь к поддержке Бегета. А вообще советовал бы бежать с Бегета, не знаю как сейчас, но раньше очень много нареканий было.

  • @slaad я не переносил сборку. Я ее сначала установил на hostinger. После мучений поставил на бегет. То же самое. На бегет и на хостингер не жалуюсь - другие сборки modx нормально стабильно работают.

  • @shahin89 Если веб-сервер Apache то переименуй ht.access в .htaccess

 

Последние комментарии

  • а редактируются они через CMP

    Покажите скриншот. Не понял что за CMP. Но если и не подвязаны, оставьте значение, которое было.
    Вот мой скриншот:
    0_1565682115311_screenshot_179.png

    Читать далее
  • D

    Участник @Andchir написал в Экспорт/импорт данных из таблиц пакетов MIGX db через плагин CatalogFill:

    MIGXDB

    какие родители в элементах migx db?
    это элементы, которые к ресурсам никак не подвязаны!
    а редактируются они через CMP

    Читать далее
  • //Название поля ID родителя $cf_config['parent_field'] = false;

    Почему так? В MIGXDB документы должны иметь родителя. Иначе как вы их добавляете/редактируете в админке?

    Читать далее
  • D

    отключил, очистил
    далее http://joxi.ru/12MEdEvtloelG2 -> http://joxi.ru/VrwXwXZt7RN7Mm
    в журнале ошибок - пусто
    код настройки

    <?php //Название класса таблицы товаров в БД $cf_config['className'] = 'delivery_flight'; //Название пакета таблицы товаров в БД $cf_config['packageName'] = 'delivery_schedule'; //Название поля ID родителя $cf_config['parent_field'] = false; //разбивка по столбцам при импорте и экспорте (content|tv|category) $cf_config['content_row'] = array( array('ID',array('id','content')), array('Наименование',array('name','content')), array('Время',array('time','content')), array('Откуда',array('from','content')), array('Время в пути',array('duration','content')), array('Куда',array('to','content')), array('Время прибытия',array('arrival_time','content')), array('Стоимость',array('price','content')), array('Тариф',array('delivery_rate_id','content')), array('Сортировка',array('sort','content')), ); //значения по умолчанию при импорте или проверка при экспорте $cf_config['imp_content_default'] = array( 'content' => array( 'deleted' => 0, 'published' => 1, //'template' => 9 'createdon' => strtotime("now") //'publishedon' => strtotime("now") //'pub_date' => strtotime("now") //'editedby' => 1 //'editedon' => strtotime("now") ), 'tv' => array( //7 => 0 ) ); //первая строка - названия полей $cf_config['include_captions'] = true; //число товаров импортируемых за один раз (загрузка по группам). 0 - не ограничивать. $cf_config['batch_import'] = 300; //разбивать по категориям $cf_config['include_categories'] = false; //удалять дочерние категории при очистке и обновлении каталога $cf_config['delete_subcategories'] = true; //по какому полю проверять соответствие товара при обновлении. false - не проверять (очистка категории при обновлении). $cf_config['imp_chk_field'] = false; //проверять соответствие товара при обновлении по значению TV. Указать ID TV. false - не проверять (очистка категории при обновлении). $cf_config['imp_chk_tvid_val'] = false; //Добавлять товары, которые не найдены при обновлении по TV (imp_chk_tvid_val) или полю (imp_chk_field) $cf_config['imp_if_not_exist'] = true; //удалять HTML-теги при экспорте $cf_config['exp_strip_tags'] = false; //автоматически генерировать псевдоним (alias) при импорте //false - выключено; true - генерировать с переводом в транслит; 'notranslit' - генерировать без перевода в транслит. $cf_config['imp_autoalias'] = false; //Изменить значения поля для всех вложенных товаров до начала импорта. //Например можно отменить публикацию для всех товаров и публиковать только те, которые есть в новом прайс-листе. //первый массив - какие поля и на какие значения менять, второй массив - условия которые нужно проверять (можно сделать пустым) $cf_config['imp_before_change'] = false;//'[{"tv.inventory":0},{}]';//'[{"published":0},{"tv.pricename":"Поставщик1"}]';//false - для отмены //удалить файл после экспорта (скачивания) $cf_config['exp_delete_file'] = false; //кодировка CSV-файла при экспорте $cf_config['exp_csv_charset'] = 'UTF-8'; //'windows-1251' //Импортировать (обновлять) пустые значения $cf_config['imp_empty'] = true; //Имя файла процессора, который использовать для импорта. Если пусто, используется стандартный процессор "import". $cf_config['imp_custom_processor'] = ''; //путь (xpath) в XML структуре до товаров $cf_config['imp_xml_itemsparent_path'] = '';//'/catalog/shop/offers'; //Структура XML файла для импорта $cf_config['imp_xml_structure'] = ''; //тестирование конфигурации (без записи в БД). Отчёты -> Журнал ошибок. $cf_config['imp_testmode'] = true; //функция для фильтрации значений при ИМПОРТЕ function filter_import($value_arr){ $output_arr = $value_arr; /* if(isset($output_arr['content']['pagetitle'])) $output_arr['content']['pagetitle'] = mb_strtoupper($output_arr['content']['pagetitle'], 'UTF-8'); */ return $output_arr; } //функция для фильтрации значений при ЭКСПОРТЕ function filter_export($value_arr,$doc_id=0){ $output_arr = $value_arr; //var_dump($value_arr,$output_arr); //exit; /* if(isset($output_arr['price'])) $output_arr[1] = floatval($output_arr[1]) - 200; */ return $output_arr; } ?>

    shema пакета, для которого написана настройка

    <model package="delivery_schedule" baseClass="xPDOObject" platform="mysql" defaultEngine="MyISAM" version="1.1"> <object class="delivery_rate" table="delivery_rates" extends="xPDOSimpleObject"> <field key="name" dbtype="varchar" precision="255" phptype="string" null="false" default=""/> <field key="color" dbtype="varchar" precision="255" phptype="string" null="false" default=""/> <field key="desc" dbtype="text" phptype="string" null="false" default="" /> <field key="sort" dbtype="int" precision="10" phptype="integer" null="false" default="500"/> <field key="deleted" dbtype="tinyint" precision="1" attributes="unsigned" phptype="integer" null="false" default="0" /> <field key="published" dbtype="tinyint" precision="1" attributes="unsigned" phptype="integer" null="false" default="1" /> <field key="createdon" dbtype="datetime" phptype="datetime" null="true"/> </object> <object class="delivery_flight" table="delivery_flights" extends="xPDOSimpleObject"> <field key="name" dbtype="varchar" precision="255" phptype="string" null="false" default=""/> <field key="from" dbtype="varchar" precision="255" phptype="string" null="false" default=""/> <field key="time" dbtype="varchar" precision="255" phptype="string" null="false" default=""/> <field key="duration" dbtype="varchar" precision="255" phptype="string" null="false" default=""/> <field key="to" dbtype="varchar" precision="255" phptype="string" null="false" default=""/> <field key="arrival_time" dbtype="varchar" precision="255" phptype="string" null="false" default=""/> <field key="price" dbtype="varchar" precision="255" phptype="string" null="false" default=""/> <field key="sort" dbtype="int" precision="10" phptype="integer" null="false" default="500"/> <field key="delivery_rate_id" dbtype="int" precision="10" phptype="integer" null="false" default="0"/> <field key="deleted" dbtype="tinyint" precision="1" attributes="unsigned" phptype="integer" null="false" default="0" /> <field key="published" dbtype="tinyint" precision="1" attributes="unsigned" phptype="integer" null="false" default="1" /> <field key="createdon" dbtype="datetime" phptype="datetime" null="true"/> <aggregate alias="Delivery_rate" class="delivery_rate" local="delivery_rate_id" foreign="id" cardinality="one" owner="foreign" /> </object> </model>

    Читать далее