Николай Ланец
31 мар. 2013 г., 11:13

Обновленная сборка для типовых сайтов-визиток

Обновленная версия прошлой сборки.
Новое: Исправлен плагин 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-я строка — элементы управления таблицами.
Скачать снапшот сборки (только для членов клуба).
Ох какая замечательная сборочка, особенно меня радует группа ресурсов «Технические страницы».) Спасибо, забираем)
благодарю за апдейт) пощупаю)
Интересно было бы глянуть на build скрипт, для сборки.
за аватарку — +1 ]:)=-
Сам скрипт, собирающий снимок сайта — Vapor. Мануал: modxcloud.com/userguide/how-tos/import-sites-with-vapor.html А конечный пакет — это как раз снимок, ссылка на загрузку которого указана в топике.
Есть немного) Злобный мохнатый шарик в моде)
А плагин phpThumbOfCacheManager отключен по умолчанию? Сам не могу пока посмотреть — какая-то фигня с доступами: ?
Сам не могу пока посмотреть — какая-то фигня с доступами
Просто переавтооризируйся. Livestreet-сессия все еще держится, а MODX-сессия отвалилась, вот и все :-) Фиксить не планирую в ближайшее время, надо modSociety доделывать.
подобные ошибки у меня до сих пор появляются, вплоть до «hacking attemp» (кстати здесь грамматическая ошибка, фиксани), все лечится с 1-2 попыток выхода и повторной авторизации… но я считаю что это всё мелкие баги, которые стоить править тогда, когда уже никаких серьёзных задач не останется. либо если на их исправление нужно минут 5-30 :))
либо если на их исправление нужно минут 5-30 :))
Это точно не 5 минут, так как речь о единых сессиях сразу двух движков. Но я бы даже не смотря на это пофиксил, если бы не был уверен в том, что мы скоро перейдем на чистый MODX без Livestreet.
Да чистый modx с функционалом livestreet это мечта. Да еще если с больным местом modx — са (я про систему кэширования) разобраться то просто будет бомба. А учитывая, что у Николая уже очень много статей этому посвящено да фиксов куча, то я уверен что все будет отлично)
Так ведь и MODX на месте не стоит. В новом релизе 2.2.7 как раз анонсируют новую систему кеширования УРЛ-ов документов, за счет чего серьезно снижают размер кеша.
киньте сборку пожалуйста, интересно…
Ну вроде да. Только я вот помню, что такое обещание было давно, когда поле uri ввели. Но вот поле то ввели, а кэш как был так и остался. А так конечно было бы очень неплохо.
Сорри, но это сборка для членов клуба. Вот проявите себя, станете полноценным членом клуба, тогда вам будут доступны все файлы клуба.
Николай, сейчас вот начал разбираться с медиасурсами и наткнулся на этот топик (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????
Я понимаю, что оффтопик злостный, но блин, вообще не знаю что делать( Помогите, пожалуйста! Уже моск нагреваться начинает перед кипением(
Привет!
Создал 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 не настроен медиасурс, то он и возвращает этот путь.
Ты методы разных объектов спутал :-)
Эвона как! © Ну значит, я ССЗБ :-) А ту вашу статью видел (она даже в закладках у меня есть), но когда писал вопрос — забыл про неё совершенно). Теперь со всем разобрался :-) Спасибо большое!
Единственно что, так это я не понял нафига делать такую замудренность в виде 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) поначалу меня и ввели в замешательство — я думал, что такое, как и у меня, должно на автомате обрабатываться :-)
Надо могу только одно ответить: можете написать новый движок. Только не забудьте про то, что существуют винды всякие и т.п., а так же не только файловые медиасорсы, но и другие, типа облачного Amazon3S и т.п.
Чорд, а ведь и правда про винду забыл. А с амазоновским хранилищем не работал никогда — поэтому даже не представляю как это работает…
Вот потому пусть лучше related остается на месте :-)

Добавить комментарий