Готовые решения
Виджет "статистика minishop2"
Установка:
1. Загрузить файл в core / components / minishop2 / elements / widgets
2. Открыть Панели / Создать виджет
3. Имя: ms2_stat (или какое хотите).
Тип: файл
Путь к файлу: [[++ core_path]] компоненты / minishop2 / элементы / виджеты / widget.ms2_stat.php
4. Панель / Добавить виджет / ms2_stat (или то что указали в п.3)
Хлебные крошки в админке MODX
<?php
if ($modx->event->name == 'OnDocFormPrerender') {
if (!$id = $modx->controller->resourceArray['id']) {
return;
}
$resources = array();
foreach ($modx->getParentIds($id, 10, array('context' => 'web')) as $parentId) {
if ($parentId) array_push($resources, $parentId);
}
natsort($resources);
$resources[] = $id;
$setting = $modx->getObject('modSystemSetting', 'settings_version');
$version = explode('.',$setting->get('value'));
$url = MODX_MANAGER_URL.'/manager/index.php?a=30&id=';
if($version[1]==3){
$url = MODX_MANAGER_URL.'?a=resource/update&id=';
}
$level = 0;
$childTemplates = '<a style="color: #333;" href="'.MODX_MANAGER_URL.'">Панель</a> <span style="color: #333;">|</span> ';
foreach ($resources as $resourceId) {
$resource = $modx->getObject('modResource', $resourceId);
if ($resourceId == $id) {
$childTemplates .= '<span style="color: #333;">'.$resource->get('pagetitle').'</span>';
} else {
$childTemplates .= '<a style="color: #333;" href="'.$url.$resource->get('id').'">'.$resource->get('pagetitle').'</a> <span style="color: #333;">|</span> ';
}
$level++;
}
$modx->controller->addHtml('
<script>'."
Ext.onReady(function() {
var title = Ext.select('#modx-resource-header');
var pagetitle = Ext.select('#modx-resource-pagetitle');
title.createChild('<p style=\"padding-bottom: 15px;\">$childTemplates</p>');
pagetitle.on('keyup', function(){
title.createChild('<p style=\"padding-bottom: 15px;\">$childTemplates</p>');
});
});
</script>
".'</script>');
return;
}
Update
(15.10.2014) — Добавлена генерация url в зависимости от версии cms.
Исходный код: github.com/tanaevr/BreadCrumbsManager
Yandex карта как TV-параметр.
Всем привет, очень часто при создании контактов на сайте требуется прикрепить туда интерактивную карту, чтобы показать где собственно говоря находится офис или фирма.
Менеджеры могут вставлять iframe (что удобно для единичного случая), но если таких офисов много?
В общем, я для личного использования сначала написала просто копируемый плагин, а потом запаковала его в компонент (вроде работает все).
При удалении только пишет ошибки) не нашла (или плохо искала) в уроках Василия как при удалении удалять созданные ресурсы (у меня плагин и категория)
ссылка на компонент
PS может кому и пригодится такая штука
Менеджеры могут вставлять iframe (что удобно для единичного случая), но если таких офисов много?
В общем, я для личного использования сначала написала просто копируемый плагин, а потом запаковала его в компонент (вроде работает все).
При удалении только пишет ошибки) не нашла (или плохо искала) в уроках Василия как при удалении удалять созданные ресурсы (у меня плагин и категория)
ссылка на компонент
PS может кому и пригодится такая штука
Вывод товаров с определенным цветом
Вывод товаров определенного цвета:
[[!msProducts?
&parents=`0`
&innerJoin=`{"Options":{"class":"msProductOption"}}`
&groupby=`msProduct.id`
&where=`{"Options.key":"color","Options.value:IN":["Белый","Белая"]}`
]]
Вывод товаров с нужным именем файла-изображения:[[!msProducts?
&parents=`0`
&innerJoin=`{"msProductFile":{"alias":"File","on":"msProduct.id = File.product_id"}}`
&groupby=`msProduct.id`
&where=`{"File.name:LIKE":"%IMG_0049%"}`
]]
Не больше 2х LIKE, если не знаешь точного имени:&where=`{"File.name:LIKE":"%file1%","OR:File.name:LIKE":"%file2%"}`
или сколько угодно в IN, если знаешь:&where=`{"File.name:IN":["file1.jpg","file2.jpg"]}`
Сниппет проверки прав доступа по группам
Простой сниппет для проверки прав доступа, при выполнении которого выводится чанк.
Может пригодится для вывода кнопок редактирования/добавления страницы соответствующим группам (журналисты, модераторы и тд).
+ существует проверка доступа, если авторизованный пользователь = автор страницы.
Может пригодится для вывода кнопок редактирования/добавления страницы соответствующим группам (журналисты, модераторы и тд).
+ существует проверка доступа, если авторизованный пользователь = автор страницы.
pdoMenu Исправление циклических ссылок
Очередной решения для сео продвижения modx revolution с помощью pdoTools.
Если вы установили pdoMenu на главной странице сайта то seo анализ выводи ошибку
На вашем сайте выявлено XX циклических ссылок — страницы ссылающиеся сами на себя
XX это количество урл на меню примеру:
modx.pro
Блоги и Пользователи когда активна страница то код вывода
Правильный варианты
1
Циклические ссылки — это ссылки, направляющие пользователя на ту же страницу, где он находится. Они крайне нежелательны на сайте, поскольку вводят посетителя в заблуждение. Ссылочный вес по таким ссылкам не передаётся и для продвижения они бесполезны.
Если вы установили pdoMenu на главной странице сайта то seo анализ выводи ошибку
На вашем сайте выявлено XX циклических ссылок — страницы ссылающиеся сами на себя
XX это количество урл на меню примеру:
modx.pro
Блоги и Пользователи когда активна страница то код вывода
<li class="active"><a href="https://modx.pro/users/">Пользователи</a></li>
Что открытая страница ссылают сам на себя.Правильный варианты
1
<li class="active"><a href="https://modx.pro/users/" rel="nofollow">Пользователи</a></li>
2<li class="active"><a href="#">Пользователи</a></li>
3<li class="active">Пользователи</li>
За вывод этого кода отвечает &tplHere=`@INLINE <li[[+classes]]><a href="[[+link]]" [[+attributes]]>[[+menutitle]]</a>[[+wrapper]]</li>`
Сниппет получения всех возможных значений TV
Получает список всех возможных значений и обертывает их в тэги
Выложено с соглания автора
[[!getTvList?name=`название TV`]]
<?
$tv = $modx->getObject('modTemplateVar', array('name' => $name));
$elements = $tv->get('elements');
$element = explode('||', $elements);
$els = array();
$output='';
foreach($element as $e)
{
list($elName, $elId) = explode("==", $e);
//$els[$elId] = $elName;
$output .= '<option value="'.($elId ? $elId : $elName).'">'.$elName.'</option>';
}
return $output;
Автор: modx.pro/users/2430/Выложено с соглания автора
pdoCrumbs Разметка с помощью microdata
Разметка «хлебных крошек» с помощью microdata
Стандартный шаблон pdoCrumbs работает без микродатой чтоб исправит эту надо добавит в шаблон этот код
Обновил код теперь он валидный на w3
Стандартный шаблон pdoCrumbs работает без микродатой чтоб исправит эту надо добавит в шаблон этот код
[[pdoCrumbs? &showAtHome=`0`&showHome=`1` &outputSeparator=``
&tplCurrent=`@INLINE <li><span>[[+menutitle]]</span></li>`
&tpl=`@INLINE <li itemtype="http://data-vocabulary.org/Breadcrumb" itemscope><a href="[[+link]]" itemprop="url" ><span itemprop="title">[[+menutitle]]</span></a><span> / </span></li>`
&tplWrapper=`@INLINE <ul class="breadcrumbs">[[+output]]</ul>`
]]
css.breadcrumbs {float:left; padding:0; margin:0; border:0;}
.breadcrumbs li {display: inline-table;}
Проверит разметкуОбновил код теперь он валидный на w3
Автонумерация алиасов
Этот плагин генерируют алиасов
site.ru/news/1/
site.ru/news/2/
site.ru/news/1/
site.ru/news/2/
Включите Дружественные URL и Автоматически генирировать псевдонимСоздайте новый плагин событиям OnDocFormSave
<?php
if ($modx->event->name == 'OnDocFormSave') {
// Категории
if (in_array($resource->parent, array(1,2,3,4))) {
$i = 1;
$where = array('parent' => $resource->parent, 'alias' => $i, 'id:!=' => $resource->id);
if ($modx->getCount('modResource', $where) > 0)
{
while ($modx->getCount('modResource', $where) > 0)
{
$i++;
$where['alias'] = $i;
}
}
// Устанавливаем алиас
$resource->set('alias', $i);
$resource->save();
// Удаляем из URI суффикс .html
$uri = preg_replace('@\.html$@', '', $resource->uri);
// Устанавливаем URI. Пример /catalog/1
$resource->set('uri', $uri);
$resource->set('uri_override', 1);
$resource->save();
}
}
Автор плагина: Брежнев Иван (vanchelo) Ловля ошибок при отправке почты с сайта
Добрый день, сообщество!
Как многим известно, у объекта modUser есть замечательный метод modUser::sendEmail, который позволяет отправлять пользователю письмо буквально в одну строчку. Не надо вручную инициировать службу modPHPMailer, выяснять email пользователя — всё это уже сделали за Вас разработчики MODX в этом методе.
Но есть один недостаток — метод возвращает только булево значение.
Как многим известно, у объекта modUser есть замечательный метод modUser::sendEmail, который позволяет отправлять пользователю письмо буквально в одну строчку. Не надо вручную инициировать службу modPHPMailer, выяснять email пользователя — всё это уже сделали за Вас разработчики MODX в этом методе.
Но есть один недостаток — метод возвращает только булево значение.