Вывод даты создания последнего дочернего документа
Привет всем!
Надо вывести типа «Последняя новость от 00.00.0000»
Понимаю, что можно сделать через pdoResources, но существует ли более изящный или проще способ?
Надо вывести типа «Последняя новость от 00.00.0000»
Понимаю, что можно сделать через pdoResources, но существует ли более изящный или проще способ?
Комментарии: 28
ну ок, напишите свой сниппет, в котором будет вызов 1 ресурса с сортировкой по дате или по ID
К сожалению, не силен в написании сниппетов :)
Необычно)
Как правило, желание делать что-то изящно, возникает тогда, когда в руках много известных технологий и знаний, когда видишь различные пути решения одной и той же задачи.
Но когда этого нет, то «Понимаю, что можно сделать через pdoResources,» — это шикарный вариант.
Как правило, желание делать что-то изящно, возникает тогда, когда в руках много известных технологий и знаний, когда видишь различные пути решения одной и той же задачи.
Но когда этого нет, то «Понимаю, что можно сделать через pdoResources,» — это шикарный вариант.
Это сообщение было удалено
В этой строке пишет, что синтаксическая ошибка:
Результата нет.
return docs[0]->get('createdon');
Мой вывод: [[!LatestNewsDate:strtotime:date=`%d.%m.%Y`? &getted_id=`3`]]
(Не уверен в правильности)Результата нет.
Это сообщение было удалено
Все работает! Спасибо! Доброго здоровья :)
Наихудший вариант из всех возможных.
Сергей, если установлен pdoTools, то используйте pdoResources с limit=1.
Сергей, если установлен pdoTools, то используйте pdoResources с limit=1.
Считаете, что лучше воспользоваться pdoResources, чем небольшим сниппетом?
pdoResources оптимальнее, чем описанный выше. Только в селект нужно указать одно поле, чтобы не гнать по сетке весь набор ненужных данных. А уж если хочется свой отдельный микросниппет, то используйте вариант отсюда.
Это сообщение было удалено
то получается она и таже каша, а не самый худший вариант…Выглядит одинаково только для тех, кто не знает матчасть. В данном случае нет знаний ни в xPDO, ни в SQL.
pdoResources будет работать как getCollection только в режиме проверки прав. Изначально он работает в облегченном режиме с массивом данных.
В твоём варианте все ресурсы указанного родителя (все!!!) с сервера полетят на клиента, а getCollection для каждой записи будет поднимать объект со всеми проверками. И всё это для того, чтобы получить одно поле одной записи. Т.е. хуже придумать нельзя.
Я выше давал ссылку как сделать это самым простым и быстрым способом.
Это сообщение было удалено
Это сообщение было удалено
Первый комментарий я вообще не понял. А по второму — учи матчасть и почитай, что значит клиент-серверная архитектура.
я просто дурак и не догоняюМы все с этого начинали. Главное — желание это исправить.
Мда… понимания что происходит 0.
И getCollection и getObject по $criteria готовят запрос в mysql. Для такого критерия он будет примерно таким для getCollection и $getted_id=2:
Так вот, отличие getCollection и getObject ДЛЯ ДАННОГО ПРИМЕРА то, что getCollection заберет все записи с базы и займет кучу памяти, а getObject только одну и памяти понадобиться гораздо меньше.
И getCollection и getObject кроме запроса в mySQL делают, что-то еще, например проверяют есть ли доступ у юзера к объекту, но что конкректно я не разбирался и разбираться, в общем-то, не собираюсь :-). Только если что-то не так пойдет смотрю код функций. Важно только то, что getCollection и getObject выгружают данные с базы в виде xpdo объекта. Делать mySQL запросы напрямую не слишком удобно. Но если скрипт тупит или по памяти вылетает, то использую вместо getCollection getIterator или $modx->query($sql).
И getCollection и getObject по $criteria готовят запрос в mysql. Для такого критерия он будет примерно таким для getCollection и $getted_id=2:
select * from modx_site_content where parent = 2 sort by createdon DESC
А getObject просто добавит limit=1select * from modx_site_content where parent = 2 sort by createdon DESC limit=1
веть он все равно получить данные и будет их сортироватьДанные обрабатывает сортирует mysql сервер. Он это делает эффективнее, чем мы можем сделать в php. И в getObject они точно не сортируются.
Так вот, отличие getCollection и getObject ДЛЯ ДАННОГО ПРИМЕРА то, что getCollection заберет все записи с базы и займет кучу памяти, а getObject только одну и памяти понадобиться гораздо меньше.
И getCollection и getObject кроме запроса в mySQL делают, что-то еще, например проверяют есть ли доступ у юзера к объекту, но что конкректно я не разбирался и разбираться, в общем-то, не собираюсь :-). Только если что-то не так пойдет смотрю код функций. Важно только то, что getCollection и getObject выгружают данные с базы в виде xpdo объекта. Делать mySQL запросы напрямую не слишком удобно. Но если скрипт тупит или по памяти вылетает, то использую вместо getCollection getIterator или $modx->query($sql).
матан и sql отсутствует!sql вам знать надо! учите.
А можешь показать место в коде, где
А getObject просто добавит limit=1Уверен, долго будешь искать ))
Мда… сюрприз однако.
SELECT… FROM `modx_site_content` AS `modResource` WHERE `modResource`.`parent` = 1
То есть, getObject получает все, а потом грузит первую запись :-(.
@Сергей Шлоков А зачем так сделано?? Память же все отстальное занимает.
И как теперь жить-то :-(. И limit через $query = $modx->newQuery долго добавлять.
<?php
if($res=$modx->getObject("modResource",array("parent"=>1))){
echo $res->pagetitle;
}
лог запросов mysqlSELECT… FROM `modx_site_content` AS `modResource` WHERE `modResource`.`parent` = 1
То есть, getObject получает все, а потом грузит первую запись :-(.
@Сергей Шлоков А зачем так сделано?? Память же все отстальное занимает.
И как теперь жить-то :-(. И limit через $query = $modx->newQuery долго добавлять.
И нафига мне эти методы?
Мне getObject нужен. Чтоб проверки доступа, все обработанные поля были. И чтоб не писать простыню кода каждый раз когда какое-то значение из базы нужно.
$pdo->getArray limit добавляет, но писать ['pagetitle'] раздражает. ->pagetitle короче. И создавать $pdo каждый раз надо.
Ваш modHelpers object limit ставит. И код писать короче. Но ради 1 функции грузить кучу кода явно не стоит. Загрузки 516. Не слишком популярная библиотека. Код написанный другим человеком и так бывает сложно разобрать и, чтоб добавить еще не популярный синтаксис должна быть веская причина. Ну и с первого раза библиотека просто не понравилась.
Так почему в getObject limit=1 не добавили? Кто-нибудь знает?
вот добавить $criteria->limit(1) после этой строки github.com/modxcms/revolution/blob/932472d65793a305bd8c971f21032f24068258ad/core/xpdo/om/xpdoobject.class.php#L423
и этой github.com/modxcms/revolution/blob/932472d65793a305bd8c971f21032f24068258ad/core/model/modx/modaccessibleobject.class.php#L96
Мне getObject нужен. Чтоб проверки доступа, все обработанные поля были. И чтоб не писать простыню кода каждый раз когда какое-то значение из базы нужно.
$pdo->getArray limit добавляет, но писать ['pagetitle'] раздражает. ->pagetitle короче. И создавать $pdo каждый раз надо.
Ваш modHelpers object limit ставит. И код писать короче. Но ради 1 функции грузить кучу кода явно не стоит. Загрузки 516. Не слишком популярная библиотека. Код написанный другим человеком и так бывает сложно разобрать и, чтоб добавить еще не популярный синтаксис должна быть веская причина. Ну и с первого раза библиотека просто не понравилась.
Так почему в getObject limit=1 не добавили? Кто-нибудь знает?
вот добавить $criteria->limit(1) после этой строки github.com/modxcms/revolution/blob/932472d65793a305bd8c971f21032f24068258ad/core/xpdo/om/xpdoobject.class.php#L423
и этой github.com/modxcms/revolution/blob/932472d65793a305bd8c971f21032f24068258ad/core/model/modx/modaccessibleobject.class.php#L96
Чтот я не понял зачем получать коллекцию если нужен то 1 объект???
Можно же просто так
Можно же просто так
<?php
$getted_id = (int)$modx->getOption('getted_id', $scriptProperties, false);
$criteria = $modx->newQuery('modResource');
$criteria->sortby('createdon', 'DESC');
$criteria->where(array('parent' => $getted_id));
if($doc = $modx->getObject('modResource', $criteria))
return $doc->get('createdon');
return;
Все равно и getCollection и getObject просто готовят запрос mysql Ну грубо говоря :-(
А вот нет пока ни одной записи. Fatal Error!
Поправил уже :-)
Уверен, что больше ничего не упустил?
П.С. Я не про то, что для получения одного поля нужно запрашивать объект целиком.
П.С. Я не про то, что для получения одного поля нужно запрашивать объект целиком.
Ну, кроме запроса объекта целиком, больше ничего не вижу. А что такого есть-то?
Контент-менеджер сохранил недописанную или заранее заготовленную статью. Что увидит пользователь на странице?
Смешно. Сам же выше на Владимира ругаешься, а сам бездумно его код скопипастил.
Смешно. Сам же выше на Владимира ругаешься, а сам бездумно его код скопипастил.
Ну добавить published = 1 в запрос.
Это сообщение было удалено
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.