+1306.48
Рейтинг

Дмитрий

[EVO] Социальный замок на контент

Заплати лайком уже известно что такое на примерах под Рево и еще каких то, но уже не очень хороших цмсках 8-). Суть, в кратце состоит в том, что продать тяжело что- то не очень оцениваемое в денежных знаках, а вот за ссылку почему бы и не поделиться аля «секретом» если юзер нажмет Like или что-то из это же серии социальных кнопок и сылка попадет к юзеру на стену.

социальный замок

До сих пор на модэкс эво такого не было по-моему и переделать тут написано как было.
Поэтому без особых сложностей было сделано:

-параметры настроек сниппета выводящего кнопки и обрабатывающего call-back'и от соц.сетей перенесены из modPropertySet просто в переменные с которыми снип дергался в нужном месте. т.е. из [[SocialLocker? &options=`ИМЯНАБОРАПАРАМЕТРОВ` &tpl=`lockshare` &unlockUrl=`103` &like=`fb,vk,twit,subscribe`]] убрано &options=`ИМЯНАБОРАПАРАМЕТРОВ`

— плейсхолдеры переписаны в стиле эво, например с [[+twitlike]] на [+twitlike+]

-в эво я не нашел как сделать чтоб страница выводила ответ типом json и из за этого сервисная страница в этом случае выдавала текст, что потребовало часть скрипта поменять…

— что то еще по мелочи, как например, в вызове не из темплейта а из чанка, по -моему на срабатывали все входящие параметры, но это уже на каждом сайте отдельно и конкретно в зависимости от настроек того же кеша и места где предполагается дергать снип. Меньше проблем если снип в темплейте по-моему…

Итак в нужном месте для кнопок,
[[SocialLocker? 
&optionsTpl=`response` 
&tpl=`lockshare` 
&unlockUrl=`192` 
&like=`fb,twit,subscribe,vk,plus1` 
&id=`[*id*]` 
&desc=`[*pagetitle*]` 

]]


где [*id*] и [*pagetitle*] это то что попадать на соц сеть будет.
Затем, unlockUrl это айди страницы где отзыв с соц.сетей обрабатывается снипетом с вызовом
[[!SocialLocker? &mode=`response`]]

Далее, SocialLocker, сам снипет:
pastie.org/8434715
в нем 4 параметра хардкодом: $subscribeGroup='5289142';
$ttwitUser='modxdeveloper'; $vkApiid='3922874' их поменяйте на свои айдишки :-)
а вот 4-й, rightSide это чанк в котором будет хранится ваша секретная инфа, которой будет делиться локер если успешно ссылочка запостилась.

Ну и напоследок, сам темплейт локера и темплейты кнопок:
lockshare
pastie.org/8434718

в нем тут 2 жс файлика:
lockershare.js
pastie.org/8434724

и unlock.js
pastie.org/8434725

fb это чанк fblike и остальные по этому же принципу названы: имя кнопки + like
<div class="sl_facebook_like"> 
<div class="fb-like" data-href="[+SharePage+]" data-send="false" data-width="90" data-show-faces="false" data-layout="button_count"></div>
</div>
<script>
function facebook_init() {
        if ('undefined' === typeof(FB)) {
                setTimeout(facebook_init, 500);
        } else {  
                FB.Event.subscribe('edge.create', function(response) { sl_unlock('facebook', 'like'); });
        } 
}
</script>

twit
<div class="sl_twitter_tweet">
        <a href="http://twitter.com/share" class="twitter-share-button" data-url="[+SharePage+]" data-counturl="[+SharePage+]" data-text="[+SharePageDesc+]" data-count="none" data-related="[+ttwit.user+]" data-lang="ru">tweet</a>
</div>
<script>
function twitter_init() {
        if (0 == $j('.sl_twitter_tweet iframe').length) {
                twttr.widgets.load();
                twitter_timeout_id = setTimeout(twitter_init, 4000); 
        } 
}
</script>

subscribe
<div id="sl_vkontakte_subscribe" class="sl_vkontakte_subscribe"></div>

vk
<div id="sl_vkontakte_like" class="sl_vkontakte_like"></div>
<script>
function vkontakte_init() { 
        if ('undefined' == typeof(VK) || 'undefined' === typeof(VK.init)) { 
                setTimeout('vkontakte_init', 500); 
        } else { 
                if (null == VK._apiId) {
                        VK.init({apiId: [+vk.apiid+], onlyWidgets: true}); 
                }                                         
                VK.Widgets.Like("sl_vkontakte_like", {type: 'button', height: 20, pageUrl: '[+SharePage+]', verb: 1});
                VK.Observer.subscribe('widgets.like.liked', function() {  sl_unlock('vkontakte', 'like'); });
                VK.Widgets.Subscribe("sl_vkontakte_subscribe", {mode: 2, soft: 0}, [+subscribe.group+]);
                VK.Observer.subscribe('widgets.subscribed', function() {  sl_unlock('vkontakte', 'subscribe'); });                                               
        } 
}
</script>


plus1
<script type="text/javascript" src="http://apis.google.com/js/plusone.js">
{"lang": "ru"}
</script>
<div class="sl_google_plus1"><g:plusone callback="sl_unlock" size="medium" href="[+SharePage+]"></g:plusone></div>


вот так, может и пригодится. *постараюсь отвечать на вопросы или коменты на баги.

[EVO] Ditto, вызов сниппета в фильтре

Доброе время суток.

вопрос вот в чём:
необходимо отфильтровать вывод по вычисляемому значению, как грамотно это сделать?

&filter=`[!counter? &docid=`id`!],0,4`

в сниппете counter идёт суммирование тв параметра дочерних ресурсов, код примерно такой:


$docid = (isset($docid) && (int)$docid>0) ? (int)$docid : $modx->documentIdentifier;	
$children = $modx->getActiveChildren($docid, 'id');
$invent = 0;
foreach ( $children as $key => $value ) {	
	
	    $vals = $modx->getTemplateVarOutput(array('inventory'),$value['id']);
	    $val = (int) $vals['inventory'];
	    if ($val<0) {$val = 0;};
	    $invent += $val;	 
}
return $invent;

MultiPhotos и галерея в стиле Вконтакте или Яндекс.Картинок

Пол года назад Илья Уткин написал сниппет для Revo, назначение которого понятно из заголовка топика. Вчера попросили сделать как раз такой вывод картинок на Evo-сайте.

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

Cheat Sheet - Шпаргалка по Evolution

Надоело подсматривать как что правильно пишется при создании ресурса
потому решил что нужно все собрать в одном месте.
http://cheats.evolution-cms.com

пока наполнил не все, если кто видит ошибки или хочет что то дополнить пишите в комментариях.

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

Плагин Ajaxify - ajax подгрузка блоков.

Плагин для MODX evo. В браузерах поддерживающих HTML5 History API (таблица браузеров) превращает сайт в одностраничный. Блоки, контент в которых не изменился, не подгружает.

Установка


Плагин оформлен в пакет для установки через MODX store. Пакет

Использование.


  • В настройках плагина укажите шаблоны для которых его активировать.
  • Укажите для блоков которые нужно обновлять атрибут data-ajaxifity=«имя блока».
    Например:
    <div class="large-3 pull-9 columns" data-ajaxify="menu"> [[Wayfinder? &startId=`1` &outerClass=`side-nav`]] </div>
  • Для блоков при обновлении которых нужно затухание укажите класс fade
  • Укажите класс no-ajaxy для ссылок при переходе по которым, не нужно использовать ajax.

[EVO] Плагин "Spoiler" для TinyMCE

Задача:
Добавить для визуального редактора возможность создать в контенте разворачиваемые блоки скрытого текста с эффектом анимации.


Для решения задачи был написан небольшой плагин «UmiSpoiler» для TinyMCE. Плагин можно скачать на git.

Чтобы установить плагин нужно распаковать архив в папку "/assets/plugins/tinymce/tiny_mce/plugins".

После идем в конфигурации MODX -> Интерфейс и представление, выбираем Тема WYSIWYG-редактора: Индивидуальна

В поле Индивидуальные плагины: добавляем umispoiler
Индивидуальные кнопки: добавляем umispoiler

Если не используете индивидуальную тему, то соответственно значение umispoiler необходимо добавить в конфигурацию выбранной вами темы TinyMCE в следующем файле
/assets/plugins/tinymce/functions.php

В итоге получите следующую кнопку в вашем редакторе.



Навеяно статьей

[EVO] [EVO] - AJAX Star Rating Bar

Хотел запостить обновление на community.modx-cms.ru а сюда топик-ссылку, но похоже у них проблемы да и комюнити уже там не тот ((( печально.
Пользовался ранее вот этим решением Модуль рейтинга для MODx на версии 1.0.5, но после обновления на версию 1.0.10 он перестал работать. Возможно изза Ajax. Не стал долго мучатся, поискал и наткнулся на интересный скрипт Unobtrusive AJAX Star Rating Bar. Чуток усилий и работает на modx :-)

Update:
В версии 1.1 добавлено:
При голосовании скрипт записывает средний бал (в формате 0.0) для удобной сортировки с помощью Ditto в TV параметр ID которого вы укажете в конфигурационном файле.

30.05.2013 — update:
В версии 1.2 добавлено:
1 — Добавлен параметр &userregister для показа рейтинга только зарегестрированным пользователям. Принимаются значения 1(да) и 0(показать всем).
2 — Исправлены мелкие недочеты и sql запрос (спасибо darislav).

Скачать можно вот от сюда AJAX Star Rating.
Дэмо можно посмотреть здесь: Дом забот

[EVO] BETA: автоустановка MODX Evo из Shell (ssh) на сервер с ispmanager (api)

Добрый день. Решил я как то сделать bash shell скрипт для автоустановки modx, чтоб одним движением руки, у меня был создан новый сайт)
Что из этого двухнедельного мучения получилось, смотрите сами))

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