Fenom в MODX (шпаргалки)

Fenom — это быстрый и удобный шаблонизатор, который очень схож со Smarty (в плане синтаксиса), но является намного лучше! С его помощью Вы можете ускорить разработку, время на выполнение запросов, сократить количество чанков, использовать циклы прям в чанках/шаблонах и многое другое

В MODX Fenom появился в 2015 году, с выходом обновления pdoTools 2.0.
Теперь когда вы устанавливается pdoTools, парсер Fenom уже активен, но не обрабатывает страницы и шаблоны сайта

Для того, чтобы включить fenom (обработку страниц и шаблонов сайта), необходимо активировать параметр pdotools_fenom_parser в системных настройках.

Синтаксис

Можете посмотреть официальную документацию, а я буду рассматривать синтаксис, касательно MODX Revolution.

Итак, как я уже говорил, синтаксис довольно прост, вместо привычных двойных квадратных скобок в MODX
[[ ]]
и Fenom используются одинарные фигурные скобки
{ }
Чтобы использовать более сложные функции, в pdoParser есть служебная переменная
{$_modx}
, которая даёт безопасный доступ к некоторым переменным и методам системы.
  1. {$_modx->resource.id}
    — вывод id текущего ресурса
  2. {$_modx->resource.tv_name}
    — вывод tv текущего ресурса
  3. {$_modx->user}
    — массив текущего пользователя
  4. {$_modx->makeUrl(10)}
    — ссылка на 10 ресурс
  5. {$_modx->config.system_setting}
    — вывод системной настройки

Читать дальше
01 июля 2018, 15:13    Андрей Копп Другое      

mFilter2 и фильтрация через select по (Популярным товарам и их Ценам)



Вывод сниппета mFilter2 выглядит у нас следующим образом:

                {$_modx->runSnippet('!mFilter2', [
                    'parents' => $_modx->resource.id,
                    'limit' => 12,
                    'class' => 'msProduct',
                    'element' => 'msProducts',
                    'tpl' => 'tpl.Site.msFilter2.productTpl',
                    'tplOuter' => 'tpl.Site.mFilter2.outerTpl',
                    'tplPageWrapper' => '@INLINE [[+pages]]',
                    'tplPage' => '@INLINE <a href="[[+href]]">[[+pageNo]]</a>',
                    'tplPageActive' => '@INLINE <a class="selected" href="[[+href]]">[[+pageNo]]</a>',
                    'where' => '{"class_key":"msProduct"}',
                    'suggestions' => 'true',
                    'filters' => '
                        ms|width:select,
                        ms|height:select,
                        ms|length:select,
                        ms|made_in:checkbox,
                        ms|vendor:vendors,
                    ',
                    'sort' => '
                        ms|price:desc
                    ',
                    'tplFilter.outer.ms|vendor' => 'tpl.Site.mFilter2.filter.outer',
                    'tplFilter.row.ms|vendor' => 'tpl.Site.mFilter2.filter.checkbox',
                    'tplFilter.outer.ms|made_in' => 'tpl.Site.mFilter2.filter.outer',
                    'tplFilter.row.ms|made_in' => 'tpl.Site.mFilter2.filter.checkbox',
                    'tplFilter.outer.ms|width' => 'tpl.Site.mFilter2.filter.outer.whl',
                    'tplFilter.outer.ms|height' => 'tpl.Site.mFilter2.filter.outer.whl',
                    'tplFilter.outer.ms|length' => 'tpl.Site.mFilter2.filter.outer.whl',
                    'tplFilter.row.ms|width' => 'tpl.Site.mFilter2.filter.select.whl',
                    'tplFilter.row.ms|height' => 'tpl.Site.mFilter2.filter.select.whl',
                    'tplFilter.row.ms|length' => 'tpl.Site.mFilter2.filter.select.whl',
                    'tplFilter.outer.ms|popular' => 'tpl.Site.mFilter2.filter.outer.whl',
                    'tplFilter.row.ms|popular' => 'tpl.Site.mFilter2.filter.select.whl',
                ])}

Читать дальше
28 марта 2018, 20:05    SEQUEL.ONE Готовые решения 1    481    0 +1

Дополнительные поля профиля User (не extended)



Потребовалось на одном проекте в форму профиля добавить для пользователей дополнительные поля. Отдельно Имя, Фамилия, Отчество и поля для добавления ссылок на социальные группы.

Читать дальше
28 марта 2018, 19:39    SEQUEL.ONE Готовые решения 1    508    0 +1

Проблемы с провайдерами VK и Facebook в HybridAuth

Недавно заметил что авторизация через VK и Facebook перестали работать, после долгих поисков решения оно было найдено. Сейчас подробно опишу действия которые нужно сделать для того чтобы всё у вас заработало. Начнём с провайдера Vkontakte.

Читать дальше
28 марта 2018, 18:27    SEQUEL.ONE Готовые решения 1    488    0 +1

Замена текста в больших файлах через SSH

Шпаргалка о том, как заменить текст в файле на сервере, который не загружается в текстовый редактор из-за большого размера.

Столкнулся с описанной выше проблемой, нашел несколько вариантов решения, делюсь ими.

Массовая замена текста через SSH в нескольких файлах

find /folder/ -name '*.html' -exec sed -i 's/старый_текст/новый_текст/g' '{}' \;

Разбираемся:

  • find ищет файлы в обозначенной папке /folder/, имена -name которых совпадают с шаблоном *.html;
  • -exec для каждого файла из списка найденных и выполняет команду sed, которая осуществляет замену текста.

если вы хотите, чтобы, допустим, после замены текста у вас осталась резервная копия исходного файла, тогда вместе c -i можно приписать "_old" или "_bak", чтобы получилось что-то наподобие -i_bak, тогда вместе с заменяемым файлом создастся еще один — «имя_файла.расширение_old».
Читать дальше
25 марта 2018, 20:21    Андрей Копп Хостинг 0    300    0 +1

ISPmanager 5 импорт из OpenSSH 7.x+ с помощью rsync

ISPmanager использует ключи ssh-dss, которые по-умолчанию запрещены в openssh 7.x, поэтому импорт пользователя с использованием rsync не работает.

Выглядит это следующим образом: импорт проходит, ошибок нет, а файлов нет, есть только структура пользователя. Так же не работает импорт с авторизацией «по ключу».

Для исправления надо включить опцию в OpenSSH на сервере в /etc/ssh/sshd_config

Код:
PubkeyAcceptedKeyTypes=+ssh-dss
на клиенте /etc/ssh/ssh_config

Код:
HostKeyAlgorithms +ssh-dss

Надеюсь, это поможет кому-то сэкономить время, а ISPsystem исправить эту досадную оплошность и перестать использовать слабые методы авторизации.
Читать дальше
25 марта 2018, 19:30    Андрей Копп Хостинг 0    84    0 +1

Курс цен от производителей miniShop2

На одном проекте нужно было сделать курс цен от производителей, чтобы была одна глобальная цена и возможность выставлять индивидуальные курсы у производителей. Готовых решений на тот момент не было, по этому пришлось импровизировать.

Нужно к ценам умножать курс от производителя для price, если производитель у товара не указан, то выводить глобальный курс, который создаём системными настройками как ms2_curs_global_enable (включить/выключить) и ms2_curs_global куда мы собственно и забиваем глобальный курс, который включается по настройке ms2_curs_global_enable. Добавил новое поле в таблицу modx_ms2_vendors под названием `curs`, а также добавил изменения в файлах модели, схемы и extjs, чтобы добавить новое поле с курсом пересчёта и установить на эти файлы CHMOD 444, чтоб при обновлении эти файлы не затёрлись.

Список изменённых файлов:

/site.ru/core/components/minishop2/model/minishop2/msvendor.class.php
/site.ru/core/components/minishop2/model/schema/minishop2.mysql.schema.xml
/site.ru/assets/components/minishop2/js/mgr/settings/vendor/grid.js
/site.ru/assets/components/minishop2/js/mgr/settings/vendor/window.js

Читать дальше
25 марта 2018, 18:33    SEQUEL.ONE Готовые решения 2    417    0 +3

Перенос данных из кастомной таблицы в таблицу modx_site_content через MySQL

При переносе данных с сайта с отличным движком можно перенести контентную часть через такой простенький запрос.

INSERT INTO `modx_site_content`(`id`, `type`, `contentType`, `pagetitle`, `longtitle`, `description`, `alias`, `link_attributes`, `published`, `pub_date`, `unpub_date`, `parent`, `isfolder`, `introtext`, `content`, `richtext`, `template`, `menuindex`,	`searchable`, `cacheable`, `createdby`, `createdon`, `editedby`, `editedon`, `deleted`,	`deletedon`, `deletedby`, `publishedon`, `publishedby`,	`menutitle`, `donthit`,	`privateweb`, `privatemgr`,	`content_dispo`, `hidemenu`, `class_key`, `context_key`, `content_type`, `uri`, `uri_override`,	`hide_children_in_tree`, `show_in_tree`, `properties`) SELECT '', 'document', 'text/html', `pagetitle`, `longtitle`, `description`, `alias`, '', 1, 0, 0, 8630, 0, `introtext`, `content`, 1, 4, 0, 1, 1, 1, 1521462907, 0, 0, 0,	0, 0, 1521462907, 1, '', 0,	0, 0,	0, 1, 'modDocument', 'web', 1, '', 0, 0, 1, NULL FROM `s_brands`;

Читать дальше
19 марта 2018, 14:51    Андрей Копп Хостинг 2    256    0 +3

Обновление TYPO3. Как узнать какой плагин используется?




Узнать, какой плагин используется на сайте можно с помощью не большого лайфхака:
 
  1. 1. Заходим в phpMyAdmin
  2. 2. Выбираем таблицу tt_content
  3. 3. Определяем, какие комбинации могут быть — CType обычно содержит имя расширения. Если плагин выбран здесь, то обычно это «список», в зависимости от плагина, но может быть синонимом здесь что-то еще.

    SELECT DISTINCT CType FROM tt_content

    — list_type обычно содержит имя расширения. Пример news_pi1

    SELECT DISTINCT list_type FROM tt_content
  4. 4. Теперь, если вы загружаете записи, которые используют плагин, вы можете видеть, на какой странице они находятся:

    SELECT * FROM tt_content WHERE CType = "list" AND list_type = "news_pi1"

Теперь вы можете получить идентификатор страницы в поле «pid» и выполнить поиск в админке, чтобы узнать, активна она или нет.
 
Вы также должны проверить, активен ли контент (deleted (удалено) = 0, hidden (скрыто) = 0)
Читать дальше
13 декабря 2017, 08:53    Андрей Копп TYPO3 0    324    0 +2