Николай Ланец
27 янв. 2014 г., 4:18

modxSite 1.1.1-beta

Сегодня официально вышел пакет modxSite. Официально, потому что хотя этот пакет и раньше существовал, сегодня я его доработал и выложил в официальный репозиторий.
Главные изменения:
1. Список устанавливаемых автоматически пакетов сократился: phpTemplates, modxSmarty, Console, Ace. Это те пакеты, без которых у нас сейчас ни один сайт не обходится.
2. Перенесены и немного переработаны getdata-процессоры из пакета shopModx. Основная причина — эти процессоры довольно универсальны, и так же используются у нас во всех проектах, при чем не только магазинах, и не только на конечных сайтах (эти процессоры используют и другие модули, например modSociety). Поэтому было решено перенести их в modxSite и несколько переработать для большей универсальности. А вот в shopModx-е эти процессоры будут урезаны, и они будут использовать процессоры из modxSite.
3. Плагины Debug и memory_get_usage включены в modxSite.
4. В момент установки modxSite создает еще несколько медиа-сурсов (Controllers, Smarty templates, Public templates и другие), а так же перенастраивает modxSmarty путь к шаблонам, меняя на core/components/modxsite/templates/.
5. В контроллерах уже лежит base.php, которого хватает на 98% случаев в случае использования phpTemplates+modxSmarty в плане связки «MODX-шаблон»-«Smarty-шаблон». На будущее — modxSite будет самым основным пакетом, вокруг которого уже будут обрастать другие масштабные компоненты. modxSite в том виде, в каком он сейчас выпускается, есть результат упорной многомесячной работы. За несколько последних месяцев мы создали новых и переделали старых (переведя на новые рельсы) десятки проектов. Та методология, которую мы сейчас используем, позволяет делать быстрые, легко управляемые и развиваемые сайты на MODX. При этом сам MODX в чистом виде этого не дает. Для этого необходимо MODX настраивать, докручивать. Вот по сути modxSite и есть тот самый «докручивающий» пакет. Условно говоря, сразу после установки его, у вас уже есть phpTemplates+modxSmarty, необходимые медиаСурсы для быстрого доступа к файлам, системные настройки и т.п. После установки пакета modxSite, устанавливаем modxSDK и приступаем непосредственно к программированию сайта.
UPD: Снял вот демонстрашку.
Отличное дополнение к ролику Разработка ModX + Phptemplates + Smarty, тут уже более разжованей, Николай, как вы набиваете в $params условие выборки по значению Tv параметров, я тут кручусь вокруг вот-этого:
{$params = [ "sort" => 'publishedon', "summary" => 1, "limit" => 3, "dir" => "DESC", "where" => [ "parent:!=" => 2, "tvs" => [ "Category:!=" => 1 ] ] ]}
такое выдает ошибку Unknown column 'modResource.tvs' in 'where clause'
Ну в ошибке собственно и ответ. where используется для формирования запроса и у объекта modResource просто нет свойства tvs.
Вот мне и нужно сформировать запрос так чтобы в результате получить обьекты в которых значение телевизора Category равны нулю или 1, в общем использовать определенные TV поля в условиях выборки.
После установки этого пакета исчезает админка, в частности управление пакетами и настройки. Меню вверху остается, слева тоже присутствует. Но в основном поле ничего нет, пустое место. Скриншот прилагаю ниже. MODX Revolution 2.2.11-pl
?
1. Стоял ли у вас раньше уже modSociety? Скорее всего да, так как в прошлой версии устанавливался и использовался расширенный класс пользователей SocietyUser (что не есть круто по ряду причин), а эта версия пакета серьезно переделана, включая удаление этого класса из него. Простое решение — зайти в базу данных и в таблице modx_users заменить class_key у всех пользователей с SocietyUser на modSociety;
update modx_users set class_key = 'modUser';
2. Если проблема не в этом, пришлите в личку доступы в админку и FTP, я посмотрю в чем именно проблема.
Отличное дополнение к ролику Разработка ModX + Phptemplates + Smarty, тут уже более разжованей,
Именно для этого и был доработан modxSite. Он собирает все основные принципы в кучу и стандартизирует разработку с использованием этих технологий. Все остальное — это уже обрастает вокруг него.
такое выдает ошибку Unknown column 'modResource.tvs' in 'where clause'
Параметры чисто синтаксически вы набиваете правильно, а вот ошибка абсолютно уместная. Уделите больше внимания изучению вызываемых процессоров, структуре базы данных и формируемым SQL-запросам. Колонки tvs в используемых таблицах нет в принципе. tvs — это отдельный элемент массива данных полученного документа, формируемый уже на уровне php. А правильно условие по TV-параметру формировать в самом процессоре. Вот пример.
Вот здесь этот вопрос очень подробно рассматривался: modxclub.ru/blog/voprosy-spetsyalistov/256.html
Тоесть чтобы выбрать документы с определенными значениями tv, нужно эти или все tv параметры набить в код процессора или же расширить и там определить все tv, задать им значения по дефолту, и из шаблона вызывать переопределив нужное с помощью массива параметров для вызываемого процессора. разве нельзя набить уже сразу код в процессор чтобы находил tv параметры и их значения и присваивал им настройки по умолчанию, хотя процессор это уже делает, тогда зачем же нам вложеный в массив обьекта ресурса массив «tvs» с тв параметрами обьекта?
Здесь вам в помощь будет умение составлять SQL-запросы. По умолчанию у нас просто джоинится таблица значений TV-параметров, и на одну запись документа мы получаем столько записей итоговых, сколько на нее есть записей в таблице значений твшек. А если мы сразу добавим фильтр по какому-то TV-полю, то мы в итоге только и получим записи с этим TV-полем. Все остальные записи будут отброшены, и в массиве tvs у вас не будет значений остальных TV-параметров.
В общем, в дальнейшем я скорее всего допилю более автоматизированный механизм фильтрации по ТВшкам, но вам все равно лучше понимать основы, так как без этого никуда.
А если мы сразу добавим фильтр по какому-то TV-полю, то мы в итоге только и получим записи с этим TV-полем. Все остальные записи будут отброшены, и в массиве tvs у вас не будет значений остальных TV-параметров.
как альтернатива этому условие на уровне шаблона в счетчике:
{foreach $result.object as $object} {if $object.tvs.Category.value == 1} <div class="col-xs-6 col-sm-4 col-md-3 col-lg-2"> <div class="thumbnail"> <img class="media-object" data-src="{$template_url}holder.js/200x150"> </div> </div> {/if} {/foreach}
вам все равно лучше понимать основы, так как без этого никуда.
тут грех не согласиться)
Да, вы можете так делать, это обычная проверка, и она годится не только для этого. Но это не годится в случае с постраничностью. Вот вам из тысяч документов надо выбрать 10 документов со сдвигом 50, и с фильтром по тв-ке. вы предлагаете получить все эти документы и на уровне пхп фильтровать? В таком случае дело не только в скорости работы, но порой и в невозможности выполнения.
Доброго времени суток.
У меня вот такая ошибка выскакивает после установки :-(. Подскажите что может быть не так.
Fatal error: Call to a member function fetch() on a non-object in /public_html/core/components/modxsite/controllers/base.php on line 15
Все компоненты установились нормально. Когда в Template вписываю base.php, ну соответственно думаю результат понятен, непонятна причина.
Спасибо.
P.S. ставил на чистую ModX 2.2.11
Здравствуйте! Определенно, что у вас в данном случае нет объекта $modx->smarty. Попробуйте переустановить пакет modxSmarty и убедитесь, что плагин modxSmarty активирован. Если не получится, пришлите в личку доступы в админку, я посмотрю в чем именно дело.
Большое спасибо за ответ. Сам разобрался. Переустановка modxSmarty ничего не дала. Я просто переустановил modx полностью и все заработало.
Странное дело. Видимо был сбой в самом MODX-е, так как класс Smarty тянется из MODX-а, а не устанавливается отдельно, и здесь самое вероятное — просто слетели системные события и на OnHandlerRequest не вызывался плагин инициализации Smarty.
Может быть. У меня при установке вообще были проблемы в первый раз, как-то оно странно себя вело. Папки не создало некоторые, по моему там я права не выставил изначально нужные и видимо что-то недоустановилось. Сейчас перед установкой сразу прописал нужные права и пользователя, все прошло гладко.
Отличный пакет. Спасибо огромное!!! Я сам работать с modx начал недавно, всего пару простых сайтов на нем сделал и очень мне не хватало нормальной шаблонизации. Со Smarty знаком очень давно и активно использовал, уже несколько лет, естественно встреча с чанками и принципом шаблонизации в ModX из коробки меня немного смутили )
Понимаю. На здоровье! :)
Николай, добрый вечер!
А сортировка по двум полям не реализована в процессорах? Правильно понимаю? ))
Вот короче как мог: GitHub :) может пригодится…
Можно использовать так: — 1) $params = [ 'sort' => 'parent', 'dir' => 'ASC' ] — 2) $params = [ 'sort' => ['parent', 'menuindex'], 'dir' => 'ASC' ] — 3) $params = [ 'sort' => ['parent' => 'ASC', 'menuindex' => 'DESC'] ] — 4)2) $params = [ 'sort' => ['parent' => 'DESC', 'menuindex'], 'dir' => 'ASC' ]
Все гораздо проще:
..... array( "sort" => "field1 DESC, field2", "dir" => "ASC", ),... // result ->sortby("field1 DESC, field2 ASC");
А я подумал что так не прокатит…
Твой вариант будет работать?
Если я его написал, то наверно он работает? ;)
:) и точно… нодо учить xPDO :)
крутяк!!! )
Этого там не прописано :) Это надо знать MySQL и экспериментировать.
Ну вот же идет конкатенация твоего «field1 DESC, field2» и «ASC» через пробел:
$sql.= $sortby['column']; if ($sortby['direction']) $sql.= ' ' . $sortby['direction'];
в итоге: «field1 DESC, field2 ASC»
а дальше (если есть элементы еще) через запятую тоже самое:
while ($sortby= next($this->query['sortby'])) { $sql.= ', '; $sql.= $sortby['column']; if ($sortby['direction']) $sql.= ' ' . $sortby['direction']; }
MySQL я знаю, просто не глянул как в хпдо запрос рендерится…
Так а как у тебя еще без конкатенации запрос вид КолонкаПробелНаправление сформируется? Конечно это строки будут склеиваться. Потому и можно туда запихнуть что хочешь. А про то, что этого там не прописано — это я говорил про документацию по xPDO (если таковая вообще имеется))). Там вряд ли такое напишут в примерах.
Тут ты прав) но перед склейкой можно почистить строки от запятых например и обернуть название колонки в `` например…
Да? А как тогда запросы типа таких выполнять? $q->sortby('concat(1,2,3)', 'DESC'); То есть проверка на зпт будет жутко ограничивать.
Я и говорю надо учить xpdo. Я до MODX писал на Kohana, тамошний QueryBuilder все оборачивает в ``, а для выражений по типу выше указанного надо использовать вот такое:
DB::expr('CONCAT(1,2,3)') //т.е. на кохане получилось бы так: $query->order_by(DB::expr('CONCAT(1,2,3)'), 'DESC');
:)
Ох… Давно я с коханой не работал))) Этот паттерн HMVC…

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