Fi1osof 27 января 2014 1 31
Сегодня официально вышел пакет 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: Снял вот демонстрашку.

31 комментарий
K
Kutuz27 30 января 2014г в 11:37 #
Отличное дополнение к ролику Разработка 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'
proxyfabio1
proxyfabio 30 января 2014г в 12:38 #
Ну в ошибке собственно и ответ.
where используется для формирования запроса и у объекта modResource просто нет свойства tvs.
K
Kutuz27 30 января 2014г в 13:25 #
Вот мне и нужно сформировать запрос так чтобы в результате получить обьекты в которых значение телевизора Category равны нулю или 1, в общем использовать определенные TV поля в условиях выборки.
Fi1osof1
Fi1osof 31 января 2014г в 05:00 #
Отличное дополнение к ролику Разработка ModX + Phptemplates + Smarty, тут уже более разжованей,
Именно для этого и был доработан modxSite. Он собирает все основные принципы в кучу и стандартизирует разработку с использованием этих технологий. Все остальное — это уже обрастает вокруг него.

такое выдает ошибку Unknown column 'modResource.tvs' in 'where clause'
Параметры чисто синтаксически вы набиваете правильно, а вот ошибка абсолютно уместная. Уделите больше внимания изучению вызываемых процессоров, структуре базы данных и формируемым SQL-запросам. Колонки tvs в используемых таблицах нет в принципе. tvs — это отдельный элемент массива данных полученного документа, формируемый уже на уровне php. А правильно условие по TV-параметру формировать в самом процессоре. Вот пример.

Вот здесь этот вопрос очень подробно рассматривался: modxclub.ru/blog/voprosy-spetsyalistov/256.html
K
Kutuz27 07 февраля 2014г в 10:25 #
Тоесть чтобы выбрать документы с определенными значениями tv, нужно эти или все tv параметры набить в код процессора или же расширить и там определить все tv, задать им значения по дефолту, и из шаблона вызывать переопределив нужное с помощью массива параметров для вызываемого процессора. разве нельзя набить уже сразу код в процессор чтобы находил tv параметры и их значения и присваивал им настройки по умолчанию, хотя процессор это уже делает, тогда зачем же нам вложеный в массив обьекта ресурса массив «tvs» с тв параметрами обьекта?
Fi1osof1
Fi1osof 07 февраля 2014г в 12:51 #
Здесь вам в помощь будет умение составлять SQL-запросы. По умолчанию у нас просто джоинится таблица значений TV-параметров, и на одну запись документа мы получаем столько записей итоговых, сколько на нее есть записей в таблице значений твшек.
А если мы сразу добавим фильтр по какому-то TV-полю, то мы в итоге только и получим записи с этим TV-полем. Все остальные записи будут отброшены, и в массиве tvs у вас не будет значений остальных TV-параметров.

В общем, в дальнейшем я скорее всего допилю более автоматизированный механизм фильтрации по ТВшкам, но вам все равно лучше понимать основы, так как без этого никуда.
K
Kutuz27 07 февраля 2014г в 13:13 #
А если мы сразу добавим фильтр по какому-то 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}
вам все равно лучше понимать основы, так как без этого никуда.
тут грех не согласиться)
Fi1osof1
Fi1osof 07 февраля 2014г в 14:10 #
Да, вы можете так делать, это обычная проверка, и она годится не только для этого. Но это не годится в случае с постраничностью. Вот вам из тысяч документов надо выбрать 10 документов со сдвигом 50, и с фильтром по тв-ке. вы предлагаете получить все эти документы и на уровне пхп фильтровать? В таком случае дело не только в скорости работы, но порой и в невозможности выполнения.
yuran1
yuran 30 января 2014г в 23:12 #
После установки этого пакета исчезает админка, в частности управление пакетами и настройки. Меню вверху остается, слева тоже присутствует. Но в основном поле ничего нет, пустое место. Скриншот прилагаю ниже. MODX Revolution 2.2.11-pl

Fi1osof1
Fi1osof 31 января 2014г в 04:13 #
1. Стоял ли у вас раньше уже modSociety? Скорее всего да, так как в прошлой версии устанавливался и использовался расширенный класс пользователей SocietyUser (что не есть круто по ряду причин), а эта версия пакета серьезно переделана, включая удаление этого класса из него. Простое решение — зайти в базу данных и в таблице modx_users заменить class_key у всех пользователей с SocietyUser на modSociety;
update modx_users set class_key = 'modUser';

2. Если проблема не в этом, пришлите в личку доступы в админку и FTP, я посмотрю в чем именно проблема.
a
artexoid 08 февраля 2014г в 23:23 #
Доброго времени суток.

У меня вот такая ошибка выскакивает после установки :-(. Подскажите что может быть не так.

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
Fi1osof1
Fi1osof 08 февраля 2014г в 23:36 #
Здравствуйте!
Определенно, что у вас в данном случае нет объекта $modx->smarty. Попробуйте переустановить пакет modxSmarty и убедитесь, что плагин modxSmarty активирован. Если не получится, пришлите в личку доступы в админку, я посмотрю в чем именно дело.
a
artexoid 09 февраля 2014г в 00:00 #
Сейчас попробую…
a
artexoid 09 февраля 2014г в 00:37 #
Большое спасибо за ответ. Сам разобрался. Переустановка modxSmarty ничего не дала. Я просто переустановил modx полностью и все заработало.
Fi1osof1
Fi1osof 09 февраля 2014г в 00:48 #
Странное дело. Видимо был сбой в самом MODX-е, так как класс Smarty тянется из MODX-а, а не устанавливается отдельно, и здесь самое вероятное — просто слетели системные события и на OnHandlerRequest не вызывался плагин инициализации Smarty.
a
artexoid 09 февраля 2014г в 00:51 #
Может быть. У меня при установке вообще были проблемы в первый раз, как-то оно странно себя вело. Папки не создало некоторые, по моему там я права не выставил изначально нужные и видимо что-то недоустановилось. Сейчас перед установкой сразу прописал нужные права и пользователя, все прошло гладко.

Отличный пакет. Спасибо огромное!!! Я сам работать с modx начал недавно, всего пару простых сайтов на нем сделал и очень мне не хватало нормальной шаблонизации. Со Smarty знаком очень давно и активно использовал, уже несколько лет, естественно встреча с чанками и принципом шаблонизации в ModX из коробки меня немного смутили )
Fi1osof1
Fi1osof 09 февраля 2014г в 01:01 #
Понимаю. На здоровье! :)
o
oobrun 21 июля 2015г в 21:43 #
Николай, добрый вечер!

А сортировка по двум полям не реализована в процессорах? Правильно понимаю? ))
o
oobrun 22 июля 2015г в 00:27 #
Вот короче
как мог: 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'
]
Fi1osof1
Fi1osof 22 июля 2015г в 15:31 #
Все гораздо проще:
.....
array(
    "sort"    => "field1 DESC, field2",
    "dir"    => "ASC",
),...
// result
->sortby("field1 DESC, field2 ASC");
o
oobrun 22 июля 2015г в 15:45 #
А я подумал что так не прокатит…

вот судя по этому: https://github.com/modxcms/revolution/blob/master/core/xpdo/om/xpdoquery.class.php#L401

и этому: https://github.com/MODX-Club/modxSite/blob/master/core/components/modxsite/processors/site/web/getlist.class.php#L114

Твой вариант будет работать?
Fi1osof1
Fi1osof 22 июля 2015г в 15:48 #
Если я его написал, то наверно он работает? ;)
o
oobrun 22 июля 2015г в 15:54 #
:) и точно… нодо учить xPDO :)

крутяк!!! )
Fi1osof1
Fi1osof 22 июля 2015г в 16:22 #
Этого там не прописано :) Это надо знать MySQL и экспериментировать.
o
oobrun 22 июля 2015г в 16:31 #
Ну вот же идет конкатенация твоего «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 я знаю, просто не глянул как в хпдо запрос рендерится…

Fi1osof1
Fi1osof 22 июля 2015г в 16:37 #
Так а как у тебя еще без конкатенации запрос вид КолонкаПробелНаправление сформируется? Конечно это строки будут склеиваться. Потому и можно туда запихнуть что хочешь.
А про то, что этого там не прописано — это я говорил про документацию по xPDO (если таковая вообще имеется))). Там вряд ли такое напишут в примерах.
o
oobrun 22 июля 2015г в 16:39 #
Тут ты прав)
но перед склейкой можно почистить строки от запятых например и обернуть название колонки в `` например…
Fi1osof1
Fi1osof 22 июля 2015г в 16:50 #
Да? А как тогда запросы типа таких выполнять? $q->sortby('concat(1,2,3)', 'DESC');
То есть проверка на зпт будет жутко ограничивать.
o
oobrun 22 июля 2015г в 18:43 #
Я и говорю надо учить xpdo. Я до MODX писал на Kohana, тамошний QueryBuilder все оборачивает в ``, а для выражений по типу выше указанного надо использовать вот такое:
DB::expr('CONCAT(1,2,3)')
//т.е. на кохане получилось бы так:
$query->order_by(DB::expr('CONCAT(1,2,3)'), 'DESC');


:)
Fi1osof1
Fi1osof 22 июля 2015г в 18:49 #
Ох… Давно я с коханой не работал))) Этот паттерн HMVC…
o
oobrun 22 июля 2015г в 18:50 #
:)
Авторизуйтесь или зарегистрируйтесь (можно через соцсети ), чтобы оставлять комментарии.