0.00
95 читателей, 66 топиков

Console

Однажды bumkaka выложил простенькое, но полезное дополнение: MODx EVO console. Консоль неказистая, конечно, но не раз помогала. В новых версиях Evo она не работает, так что я на скорую руку исправил (теперь не будет работать в старых версиях), а заодно добавил туда редактор Ace. Почему не CodeMirror? Потому что Ace умеет показывать ошибки в php.

Если кому нужно, то лежит здесь: github.com/Pathologic/console

Сниппет для получения всякой информации о пользователе

Делал как-то для tiptop , может еще кому пригодится: https://github.com/Pathologic/userEnv. С помощью сниппета можно получить такие данные: IP, браузер, географические данные (страна, регион, город, координаты). Для получения геоданных используется база Sypex Geo City (UTF-8), базу нужно периодически обновлять.

Сниппет можно указать в параметре prepare или prepareProcess при вызове FormLister, тогда можно будет использовать плейсхолдеры [+env.ip+], [+env.browser+], [+env.country+], [+env.region+], [+env.city+], [+env.coords+].

Можно и как обычный сниппет вызвать, указав чанк в параметре &tpl. Плейсхолдеры будут без префикса env. Например:

[!
userEnv?
&tpl=`@CODE:Ваш IP: [+ip+]`
!]

Вывод даты создания, если дата публикации отсутствует

При переносе данных из Wordpress в EVO, столкнулся с такой проблемой – дата публикации для документа не указана. А в уже настроенных шаблонах что-то менять было лень. Кроме того, просто указывать в качестве даты документа — дату создания не всегда уместно – бывает отложенная публикация.
Так как вывод документов идёт через Doclister, добавляем prepare:
&prepare=`myDate`

Создаем сниппет myDate:
if ($data['pub_date'])
   $data['myDate'] = $data['pub_date'];
else
	$data['myDate'] = $data['createdon'];
return $data;

Соответственно, внутри шаблона Doclister указываем:
[+myDate:date=`%d.%m.%Y`+]


Возможно, существует более быстрое решение, но это первое, что пришло на ум.

Два виджета для ManagerManager

Написал два виджета для плагина ManagerManager.
На 25.05.2017 года не рекомендую использовать!
В версии MODX.Evo.Custom 1.2.1-d9.1.5 от виджета полностью ломается ManagerManager 0.6.2
В версии MODX.Evo.Custom 1.2.1-d9.1.0 работает нормально.

Первый mm_setDefaultTab.
Виджет делает видимой вкладку ОБЩИЕ в случаи если активной вкладки нет. Такая ситуация может возникнуть когда в конфигурации сайта стоит галочка — «Запоминать вкладки» (мне очень удобно, всегда ставлю ДА) и создали свои вкладки с помощью mm_createTab назначенные для определенных шаблонов.
Для использования добавить строчку mm_setDefaultTab('tabGeneral', '', ''); в mm_rules. Добавлять надо после строк которые создают дополнительные табы.
Скачать mm_setDefaultTab

Второй mm_hideNameTvFields
Для использования добавлять mm_hideNameTvFields('список TV параметров', '', '');
Предназначен для своих custom TV параметров. Виджет скрывает ячейку таблицы в которой отображается название/описание TV параметра, когда я пишу свой custom TV параметр мне жалко это практически пустующие место.
Скачать mm_hideNameTvFields

Кастомные TV + JS: patternTV, colorsTV, tagsTV - добавление графических параметров

Здравствуйте!

Решение возможно незрелое и код корявенький, но для меня удобное и простое.
Так как не использую managermanager, и, соответственно виджеты — а необходимость ввода графических данных (параметров) TV сохраняется — появилось это решение.

GitHub https://github.com/maximlit/modxCustomTV

Базируется: CustomTV и JS без зависимостей.

Читать дальше →

ДЕЛАЕМ AJAX мать его так! :)

Требование: подключённый jquery.

Загружаем в наш DIV чё хотим. В примере id у DIV'а lalala.

Если подключён jquery, делаем:

<div id="#lalala" style="display: none;">
тут для поисковиков напишите что хотите, SEO'шникам ваще лафа.
</div>
<script>
$(document).ready(function() {
 $('.levajax').click(function(e){  //href class='levajax' data-levajax='divid'
   var href = this.href;
   var d = this.dataset.levajax; 
   $.ajax({
       url: href,
       type: 'GET',
       dataType: 'html',
       success: function(response) {
                 result = $(response).find(d);
                 $( d ).html(result);
                 $( d ).css('display','block'); //или inline как хошь
       }
   });
   return false; 
 });
</script>


и делаем где угодно, как пример:
<a href='что хошь' class='levajax' data-levajax="#lalala">
[+pagetitle+]
</a>


Главное, чтобы на странице был DIV с id, указанный в data-levajax и у ссылки класс был class='levajax'.

Meta Keywords

Берём все слова, из любых текстов и без сортировки по частоте появления в тексте, выводим их:

Сниппет [[getWords]]
Вызов: [[getWords? &text=`любой текст]]
Пример: [!getWords? &text=`[*pagetitle*] [*content*] [*мояTV*]`!]
Возвращает: тупо слова через запятую

Код сниппета:

$minlen=2; //Минимальная длина слова
$nowords=explode(",","звать,приглашать,принять,участие"); //Слова для исключения
$words=str_word_count($text, 1,"АаБбВвГгДдЕеЁёЖжЗзИиЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщЪъЫыЬьЭэЮюЯя");
foreach ($words as &$word) {
 if (mb_strlen($word)>$minlen && !in_array($word,$nowords)){
         $nm[]=mb_strtolower($word);
 }
}
$nm=array_unique($nm);
return @implode(",", $nm);


Для тех кто в танке или думает, что имеет значение какое место занимает слово, то добро пожаловать в факи яндекса и гугла — там ответ один — похрену что в мета тегах, мы рулим alt'ами изображений и совсем совсем чуточку учитываем ваши кейвордсы… причём иъ ждина нас не волнует.