0.00
96 читателей, 73 топика

[EVO] Мультизагрузчик файлов в админке через jquery uploadify

Решил подправить загрузчик файлов через flash в «Управлении файлами». Бывает, иногда надо вставить файлы кучками не через контент. Конечно, KCFinder удобен в этом плане, но чтобы его вызвать напрямую, надо открывать какой-нибудь документ для редактирования и я не стал заморачиваться, а в «управлении файлами» я давно, еще с версии 0.96 пользуюсь uploadify. Это флешка и скрипт на php и пара JS со всеми вытекающими. Основная задача — чтобы за один раз можно было выбрать более одного файла.



Есть, конечно, недоработки (не я писал этот модуль, только правил для работы с версии 1.0.5) — картинки автоматом не ресайзятся, и не транслитерируются, не отрабатывает событие «OnFileManagerUpload», но если руки на месте — всё будет ок, для своих задач юзабельно.

Если есть идеи добавить в обработчик колбека недостающие функции, перечисленные выше, или вообще переписать заново — есть репозиторий на github. Там же можно и скачать.

[EVO] Ускоряем разработку в MODX с помощью EMMET

В последних версиях CodeMirror встроен замечательный плагин Emmet
кто не знаком вот пару ссылок:
emmet.io/
habrahabr.ru/post/170565/

Суть плагина пишем краткую аббревиатуру и после нажатия кнопки TAB получаем полную запись. так же в нем есть возможность написать свои сокращения.
В данным момент их мало

"!dit":"[!Ditto? &parents=`` &tpl=`` &sortDir=`ASC` &paginate=`0` &display=`3`!]",
"dit":"[[Ditto? &parents=`` &tpl=`` &sortDir=`ASC` &paginate=`0` &display=`3`]]",
"!dittto":"[!Ditto? &parents=`` &tpl=`` &sortDir=`ASC` &paginate=`0` &display=`3`!]",
"ditto":"[[Ditto? &parents=`` &tpl=`` &sortDir=`ASC` &paginate=`0` &display=`3`]]",
"thumb":"[[phpthumb? &input=`[+image+]` &options=`w=150,h=76,far=C,bg=FFFFFF`]]",
"!thumb":"[[phpthumb? &input=`[+image+]` &options=`w=150,h=76,far=C,bg=FFFFFF`]]",
"!evo":"[!EvoGallery? &display=`images`!]",evo:"[[EvoGallery? &display=`images`]]",
"evogallery":"[[EvoGallery? &display=`images`]]",
"!evogallery":"[!EvoGallery? &display=`images`!]",
"cheader":"{{header}}",
"chead":"{{head}}",
"con":"[+content+]",
"content":"[+content+]",
"foo":"{{footer}}",
"cfooter":"{{footer}}"

они не совсем понятные + для чанков думаю не акутальны, потому решил немного доработать и привести в порядок:

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

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

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

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

EvoGallery (новый менеджер галереи)

Приветствую всех!

Все началось с того что друг решил заиметь себе сайт.
И надо ему разместить на нем портфолио, а оно у него ну очень обширное.

EvoGallery — классный модуль, но подписывать эскизы…
(еще год назад Dmi3yy на GitHub предлагал)

Вот хочу вынести на суд, свое первое в жизни «творение».

Что получилось из скрещивания jQuery-File-Upload и EvoGallery (Pre-alpha)
Видео

Что умеет в отличие от «стокового» менеджера:
  • быстро и удобно заполнять титлы и дескрипшины к картинкам
  • менять размеры для каждого ресурса
  • навигация кликом по дереву ресурсов
  • ...

Ну и полностью совместим с сниппетом EvoGallery.

Задумок много, хотелось бы услышать ваши пожелания.

UPD
Небольшие фиксы (теперь работает генерация превьюшек и сохраняется оригинал)
Собрал пакет для репозитория:
github.com/russelgal/eGal/archive/master.zip
UPD1
добавлена регенерация
github.com/russelgal/eGal2/archive/master.zip

Rotate. Смена картинок в шапке

Добрый день.

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

Название сниппета: rotate
Описание: красивая смена изображений


<?php
/*      
* Смена картинок
* 
* version: 0.2
* 
* Author:
*       darksmoke from modx.im
*                       dsmoke@ukr.net
* 
* Параметры:
*       &path - путь к папке с картинками. На конце слэш (Пример: assets/images/rotate/")
*		
*/

if ($handle = opendir($_SERVER['DOCUMENT_ROOT'].'/'.$path)) 
{
	$output = '<ul id="fade">';
    while (false !== ($file = readdir($handle))) 
	{ 
        if ($file != "." && $file != "..") 
		{ 
			$output .= '<li><img src="[(site_url)]'. $path . $file .'" alt="" /></li>';
        } 
    }
	$output .= "</ul>";
    closedir($handle); 
}

return $output;
?>


Как использовать?

Добавляем строки между тэгом head и /head

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.min.js"></script>
	<script type="text/javascript" src="http://focus-sns.googlecode.com/svn/tags/connect-1.1.0/connect-web/src/main/webapp/components/jquery-cycle/jquery.cycle.min.js"></script>
	<script type="text/javascript">
		$(document).ready(function () {
			$('#fade').cycle();
		});
	</script>

[EVO] Сниппет plural для правильного вывода числительных

Сниппет подставляет правильную форму слова при передаче в него числа
  • 1 день
  • 4 дня
  • 570 дней

<?php
$n = (isset($n))? $n: 10;
$word1 = (isset($word1))? $word1: 'день';
$word2 = (isset($word2))? $word2: 'дня';
$word5 = (isset($word5))? $word5: 'дней';
$plural = $n%10==1&&$n%100!=11?$word1:($n%10>=2&&$n%10<=4&&($n%100<10||$n%100>=20)?$word2:$word5);
return $plural;
?>


По умолчанию выводит формы слова «день», но можно задать и свои.
Вот такой запрос
[!plural? &n=106 &word1=`шашлык` &word2=`шашлыка` &word5=`шашлыков`!]

выдаст слово "шашлыков"

Чтобы постить в «быстрые решения» — не хватает кармы. Добавьте, кому не жалко

Решение проблемы с именованными якорями.

Столкнулся сегодня с одной проблемой, решение которой с подробным описанием для которой лично мне найти не удалось. Поэтому решил написать тут варианты решения и надеюсь они кому-то будут полезны и сэкономят время.
Итак проблема — сайт на Modx Evo, сборка от Dmi3yy MODX custom 1.0.10-d5.3RC от 24.05.2013. Jquery UI версия 1.10.3. При попытке реализовать на этой связке табы на всех странницах кроме главной в табы загружается главная страница.

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

[EVO] Исправление некорректной работы modxloginza с yandex.ru

Добрый день. Мне необходимо было сделать возможность входа на сайт через соцсети. Для этого я взял сниппет modxloginza v.0.4 отсюда.

Однако, на сайте предусмотрена возможность заказа. Пользователи должны получать информацию на реальный email, а некоторые службы не возвращают информацию о пользователе, в том числе, тот самый email.

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

Главное, что я заметил — modxloginza крайне некорректно работает со службой Яндекса. В двух местах в сниппете modxloginza есть устаревшие или неправильные условия. Конкретнее, в файле loginza.class.php начало функции Login выглядит так:

global $modx;

        $json = new Services_JSON();    // получаем и декодируем данные от Логинзы
        $loginza_data = file_get_contents('http://loginza.ru/api/authinfo?token='.$loginza_token);
        $ldata = $json->decode($loginza_data);
        if(isset($ldata->error_type)) return ENTER_ERROR.$ldata->error_message.RETRY_ENTER;

        // определяем имя провайдера, логин и никнейм пользователя
        $ltype = parse_url($ldata->provider);
        $ltype = $ltype['host'];
        if(!isset($ldata->uid)) {
            $luid = parse_url($ldata->identity);
            $luid = explode('.',$luid['host']);
            $luid = $luid[0];

        } else $luid =  $ldata->uid;

        if(empty($ldata->nickname)) $lnick = $luid; else $lnick = $ldata->nickname;
        // здесь нужно помещать обработку для отдельных провайдеров:
        if($ltype=='openid.yandex.ru') $ltype = 'yandex.ru';

        $this->User = array();
        $this->User['username'] = $lnick.'@'.$ltype;
        $this->User['password'] = substr(md5($this->User['username'].$this->mysecret), 0, 12);

        //отдача email разными сервисами
        // vkontakte -
        // facebook +
        // yandex -/+ (если пользователь разрешил, по умолчанию нету)
        // google +
        // .....
        //____!!! В Н И М А Н И Е !!!____
        //на данный момент если сервис не отдал емайл
        //то устанавливается "левый-подставной"
        //_НЕ ОТСЫЛАЙТЕ НА НЕГО ПОЧТУ!_


Осуществляется неправильная проверка данных Яндекса. Я исправил код:

global $modx;

        $json = new Services_JSON();    // получаем и декодируем данные от Логинзы
        $loginza_data = file_get_contents('http://loginza.ru/api/authinfo?token='.$loginza_token);
        $ldata = $json->decode($loginza_data);
        if(isset($ldata->error_type)) return ENTER_ERROR.$ldata->error_message.RETRY_ENTER;

        // определяем имя провайдера, логин и никнейм пользователя
        $ltype = parse_url($ldata->provider);
        $ltype = $ltype['host'];
        if(!isset($ldata->uid)) {
            $luid = parse_url($ldata->identity);
            $luid = explode('.',$luid['host']);
            $luid = $luid[0];

        } else $luid =  $ldata->uid;

        if(empty($ldata->nickname)) $lnick = $luid; else $lnick = $ldata->nickname;
        // здесь нужно помещать обработку для отдельных провайдеров:
		
		// [lambrusco] 29.05.2013
        if (strpos($ltype, 'openid.yandex.ru') !== false) {
			$ltype = 'yandex.ru';
			$identityArr = explode('/', $ldata->identity);
			$lnick =  $identityArr[count($identityArr)-2];
		}	

        $this->User = array();
		
        $this->User['username'] = $lnick.'@'.$ltype;
		
        $this->User['password'] = substr(md5($this->User['username'].$this->mysecret), 0, 12);

        //отдача email разными сервисами
        // vkontakte -
        // facebook +
        // yandex -/+ (если пользователь разрешил, по умолчанию нету)
        // google +
        // .....
        //____!!! В Н И М А Н И Е !!!____
        //на данный момент если сервис не отдал емайл
        //то устанавливается "левый-подставной"
        //_НЕ ОТСЫЛАЙТЕ НА НЕГО ПОЧТУ!_
        if(isset($ldata->email)) $this->User['email'] = $ldata->email;
        else  {
			// [lambrusco] 29.05.2013
			// обтабатываем различные исключительные ситуации
			// вконтакте не возвращает адрес электронной почты, и т.д.
			$preg_template_vk = '/([0-9]*@vk.com)/';
			if (preg_match($preg_template_vk, $this->User['username'])) {
				// опа, нет мыла, тогда запихаем пользователя в группу email_request
				if (trim($groups) !== '') 
				{
					$groups .= ",email_request";
				} 
				else 
				{
					$groups = "email_request";				
				}
				// адрес уникальный, значит, нам подходит
				$this->User['email'] = $this->User['username'];
			} 
			elseif ($ltype == 'yandex.ru')
			{
				// ранее мы получили корректный email для yandex
				$this->User['email'] = $this->User['username'];				
			}	
			else
			{
				// обрабатываем подобные варианты развития событий для других провайдеров
				// z-z-z...
				// а пока что
				$this->User['email'] = $this->User['username'];
			}
		}	


Кроме этого, есть еще вопросы:

Кто-нибудь вообще пользуется modxloginza?

Какие есть альтернативы для нее? Я не смог найти в интернете решения для MODx EVO.

П.С. Забыл добавить, в чем, собственно, была некорректность работы. Для всех аккаунтов через Яндекс генерировалось имя пользователя openid@yandex.ru, соответственно, и этот же электронный адрес. Ошибка — в неправильной обработке identity.