Fi1osof 31 марта 2013 1 26
Обновленная версия прошлой сборки.

Новое:
Исправлен плагин Debug (по умолчанию отключен). Очень полезно, когда у вас на сайте 500-ая ошибка. Так же если вы предполагаете, что где-то какие-то MODX-ошибки, то можно изменить $modx->setLogLevel(1) на $modx->setLogLevel(3) (уровень Debug), и тогда вы увидите все отладочную информацию MODX.

Сниппет MetaX. Кстати, в нем уже исправлен баг с выводом системного языка.

Сниппет GoogleSiteMap. Так же настроена страница sitemap.xml

Special for ilyautkin сниппет phpThumbOf.

Внемля замечанию abuhasub , была создана группа ресурсов «Технические страницы», доступ к которой дан группе пользователей Administrator только на контекст mgr. Это означает то, что в админке кроме админов никто не увидит эти документы (и не сможет редактировать), но запрет не распространяется на другие контексты, то есть в паблике эти страницы будут отлично просматриваться. Так что манагеры теперь не увидят технические страницы. Просто отнесите документ к этой группе ресурсов, и все будет тип-топ.

Политики безопасности console и Debug. Это для компонента Console и плагина Debug.

Сниппет getSourcePath. Это мой новый сниппет. Смысл в нем следующий: так как довольно часто мы используем медиасурсы, у нас возникают проблемы с путями, когда получаем данные просто запросом из базы, а не через объекты TV, использующие медиасурсы. Когда мы через объект TV работаем, тогда вопросов нет, TV-шка сама вызывает медиасурс и формирует конечный путь, а уогда у нас просто строка из БД, тогда у нас путь не полный. Вот для того, чтобы сформировать полный путь, нам и нужен этот сниппет. Вот его код:
<?php
// Получаем объект
if(!$id OR !$source = $modx->getObject('sources.modMediaSource', $id)){return '';};
// Инициализируем 
$source->initialize(); 
//
$result = $source->$callback();
unset($source);
return $result;

У этого сниппета два параметра:
id — по умолчанию стоит [[++default_media_source]] и возвращает id системного медиасурса. У нас стоит медиасурс Картинки, вот для него пути и будут по умолчанию формироваться (Здесь бага — сниппет не процессит плейсхолдеры при инициализации, потому он не получает реальный id из настроек, и использует по умолчанию 1, потому придется в настройках указывать id реального медиасурса. В следующей сборке пофиксится).
callback — метод объекта MediaSource — по умолчанию getBaseUrl. То есть по умолчанию возвращает УРЛ-путь сурса.

То есть, если мы хотим получить УРЛ базового медиасурса, то просто пишем [[++getSourcePath]], или $url = $modx->runSnippet('getSourcePath'); или в Smarty {snippet name=getSourcePath}

id и callback можно передавать в параметрах вызова сниппета.

jQuery 1.8.0

TV keywords

В TinyMCE добавлена 3-я строка — элементы управления таблицами.

Скачать снапшот сборки (только для членов клуба).
26 комментариев
abaddon651
abaddon65 31 марта 2013г в 16:00 #
Ох какая замечательная сборочка, особенно меня радует группа ресурсов «Технические страницы».)
Спасибо, забираем)
Fi1osof1
Fi1osof 31 марта 2013г в 17:30 #
пожалуйста:-)
modxor1
modxor 31 марта 2013г в 17:47 #
за аватарку — +1 ]:)=-
Fi1osof1
Fi1osof 31 марта 2013г в 17:54 #
modxor , abaddon65 , а у вас авы похожие)))
abaddon651
abaddon65 31 марта 2013г в 19:12 #
Есть немного) Злобный мохнатый шарик в моде)
modxor1
modxor 31 марта 2013г в 17:12 #
благодарю за апдейт) пощупаю)
Fi1osof1
Fi1osof 31 марта 2013г в 17:30 #
не за что)
abuhasub1
abuhasub 31 марта 2013г в 17:18 #
Интересно было бы глянуть на build скрипт, для сборки.
Fi1osof1
Fi1osof 31 марта 2013г в 17:53 #
Сам скрипт, собирающий снимок сайта — Vapor. Мануал: modxcloud.com/userguide/how-tos/import-sites-with-vapor.html
А конечный пакет — это как раз снимок, ссылка на загрузку которого указана в топике.
ilyautkin1
ilyautkin 31 марта 2013г в 20:33 #
А плагин phpThumbOfCacheManager отключен по умолчанию? Сам не могу пока посмотреть — какая-то фигня с доступами:
Fi1osof1
Fi1osof 31 марта 2013г в 20:43 #
Сам не могу пока посмотреть — какая-то фигня с доступами
Просто переавтооризируйся. Livestreet-сессия все еще держится, а MODX-сессия отвалилась, вот и все :-)
Фиксить не планирую в ближайшее время, надо modSociety доделывать.
modxor1
modxor 31 марта 2013г в 21:07 #
подобные ошибки у меня до сих пор появляются, вплоть до «hacking attemp» (кстати здесь грамматическая ошибка, фиксани), все лечится с 1-2 попыток выхода и повторной авторизации… но я считаю что это всё мелкие баги, которые стоить править тогда, когда уже никаких серьёзных задач не останется. либо если на их исправление нужно минут 5-30 :))
Fi1osof1
Fi1osof 31 марта 2013г в 21:10 #
либо если на их исправление нужно минут 5-30 :))
Это точно не 5 минут, так как речь о единых сессиях сразу двух движков. Но я бы даже не смотря на это пофиксил, если бы не был уверен в том, что мы скоро перейдем на чистый MODX без Livestreet.
abaddon651
abaddon65 31 марта 2013г в 21:41 #
Да чистый modx с функционалом livestreet это мечта. Да еще если с больным местом modx — са (я про систему кэширования) разобраться то просто будет бомба. А учитывая, что у Николая уже очень много статей этому посвящено да фиксов куча, то я уверен что все будет отлично)
Fi1osof1
Fi1osof 31 марта 2013г в 22:49 #
Так ведь и MODX на месте не стоит. В новом релизе 2.2.7 как раз анонсируют новую систему кеширования УРЛ-ов документов, за счет чего серьезно снижают размер кеша.
abaddon651
abaddon65 31 марта 2013г в 23:42 #
Ну вроде да. Только я вот помню, что такое обещание было давно, когда поле uri ввели. Но вот поле то ввели, а кэш как был так и остался. А так конечно было бы очень неплохо.
vgrish1
vgrish 31 марта 2013г в 23:40 #
киньте сборку пожалуйста, интересно…
Fi1osof1
Fi1osof 31 марта 2013г в 23:53 #
Сорри, но это сборка для членов клуба.
Вот проявите себя, станете полноценным членом клуба, тогда вам будут доступны все файлы клуба.
A
AlOshka 01 апреля 2013г в 19:57 #
Николай, сейчас вот начал разбираться с медиасурсами и наткнулся на этот топик (getSourcePath).
Пытаюсь понять как правильно сформировать адрес.
Для начал решил проверить вот это:
Когда мы через объект TV работаем, тогда вопросов нет, TV-шка сама вызывает медиасурс и формирует конечный путь

Создал ms с basePath и baseUrl равными "/images/". Потом создал tv, привязал к этому ms. В документе выбрал картинку через этот tv.
Итоговый урл должен быть "/images/inner_folder/picture.jpg"

Затем пишу в консольке (спасибо за неё, кстати)):
// 8 - это id tv
$tv = $modx->getObject('modTemplateVar', 8);
// 4 - id ресурса, в котором выбирали картинку
// return $tv->getValue(4);
return $tv->renderOutput(4);

И получаю вот это (и посредством renderOutput и getValue — одно и то же):
inner_folder/picture.jpg

Хм. Пишу в контенте документа [[*tvname]], проверяю:
//images/inner_folder/picture.jpg

Первая мысль — WTF??
Это было 1е не понятное :-(

Дальше пробую получить путь, как у вас в сниппете:
$ms = $modx->getObject('sources.modMediaSource', 3);
$props = $ms->getPropertyList();
$basePath = $ms->getBasePath();
return $basePath;
//$baseUrl = $ms->getBaseUrl();
//return $baseUrl;

И получаю ничего не значащую ошибку:
syntax error: 

Да, вот таким вот прямым текстом.

Лезу вот сюда
WTF????

Я понимаю, что оффтопик злостный, но блин, вообще не знаю что делать( Помогите, пожалуйста! Уже моск нагреваться начинает перед кипением(
Fi1osof1
Fi1osof 01 апреля 2013г в 20:48 #
Привет!
Создал ms с basePath и baseUrl равными "/images/"
Если basePathRelative не установлено в false, но не надо ставить слеш в начале. Потом получается в пути двойной слеш: //images/inner_folder/picture.jpg
И получаю ничего не значащую ошибку:
syntax error:
Пропиши в файле connectors/index.php
error_reporting(E_ALL ^ E_NOTICE);
ini_set('display_errors', 1);
и будешь получать что-то значащие сообщения (только не забывай на продакшене убирать это).
Лезу вот сюда…
WTF????
Ты методы разных объектов спутал :-) Внимательно перечитывай эту статью: community.modx-cms.ru/blog/modx-xpdo/9611.html
Ты смотришь класс modMediaSource, а надо modFileMediaSource (у нас же файловый медиасурс).

А по сабжу (по проблемам с путями), вот этот твой вариант правильный:
// 8 - это id tv
$tv = $modx->getObject('modTemplateVar', 8);
// 4 - id ресурса, в котором выбирали картинку
return $tv->renderOutput(4);
Просто ты наверняка забыл сделать $modx->switchContext('web');, а TV-параметры имеют отдельные настройки сурсов для разных контекстов, и так как для контекста mgr не настроен медиасурс, то он и возвращает этот путь.
A
AlOshka 02 апреля 2013г в 00:42 #
Ты методы разных объектов спутал :-)

Эвона как! © Ну значит, я ССЗБ :-)
А ту вашу статью видел (она даже в закладках у меня есть), но когда писал вопрос — забыл про неё совершенно). Теперь со всем разобрался :-)
Спасибо большое!
Fi1osof1
Fi1osof 02 апреля 2013г в 00:46 #
Пожалуйста!
A
AlOshka 02 апреля 2013г в 00:57 #
Единственно что, так это я не понял нафига делать такую замудренность в виде base(Path/Url)Relative.
Ведь можно же было всё это автоматически определять по наличию/отсутствию слэша/MODX_BASE_PATH в начале строки basePath/baseUrl медиасоурса и, исходя из этого, формировать конечный адрес.
Т.е., к примеру, вот кусок кода моего компонента:
function getFileUrl ($input) {
    $fileUrl = $this->fileHandler->getDirectoryFromFile($input);
    // если в $input из сниппета пришла строка вида - "filename.ext", т.е. без слэшей и папок
    if ($fileUrl == './') {
        $fileUrl = '';
    }
    $inputUrlType   = '';
    // если адрес относительный
    if (!$this->isAbsoluteUrl($fileUrl)) {
        // значит пришёл адрес вида "images/picture.jpg"
        $inputUrlType = 'relative';
    }
    // если абсолютный, но не существующий и не содержащий MODX_BASE_PATH в начале строки
    else if (!file_exists($fileUrl) && strpos($fileUrl, $this->basePath) !== 0) {
        // значит пришёл адрес вида "/images/picture.jpg"
        $inputUrlType = 'absolute';
    } else {
        // иначе пришёл полный физический путь.
        // так сделаем же из него абсолютный!
        $fileUrl = '/'. substr($fileUrl, strlen($this->basePath));
        $inputUrlType = 'absolute';
    }
    $fileUrl = $this->fileHandler->sanitizePath($fileUrl);
    $fileUrl = $this->fileHandler->postfixSlash($fileUrl);

    $this->inputUrlType = $inputUrlType;
    $this->fileUrl      = $fileUrl;
    return $this->fileUrl;
}
function getFilePath () {
    switch ($this->inputUrlType) {
        // если файл пришёл в виде относительного урл
        case 'relative':
            $filePath = $this->basePath .'/'. $this->baseUrl .'/'. $this->fileUrl;
            break;
        // если файл пришёл в виде абсолютного урла
        case 'absolute':
            $filePath = $this->basePath .'/'. $this->fileUrl;
            break;
    }
    $this->filePath = $this->fileHandler->sanitizePath($filePath);
    return $this->filePath;
}
function isAbsoluteUrl ($path) {
    $path = $this->fileHandler->sanitizePath($path);
    return (substr($path, 0, 1) == '/');
}

И вот здесь абсолютно пофигу — пришёл ли относительный путь, абсолютный или вообще полный физический — всё корректно обработается и вернутся правильные fileUrl и filePath. Поэтому эти 2 настройки (base(Path/Url)Relative) поначалу меня и ввели в замешательство — я думал, что такое, как и у меня, должно на автомате обрабатываться :-)
Fi1osof1
Fi1osof 02 апреля 2013г в 01:13 #
Надо могу только одно ответить: можете написать новый движок. Только не забудьте про то, что существуют винды всякие и т.п., а так же не только файловые медиасорсы, но и другие, типа облачного Amazon3S и т.п.
A
AlOshka 02 апреля 2013г в 01:21 #
Чорд, а ведь и правда про винду забыл.
А с амазоновским хранилищем не работал никогда — поэтому даже не представляю как это работает…
Fi1osof1
Fi1osof 02 апреля 2013г в 01:25 #
Вот потому пусть лучше related остается на месте :-)
Авторизуйтесь или зарегистрируйтесь (можно через соцсети ), чтобы оставлять комментарии.