Как вывести новости начинающиеся с буквы "Б" и т.п
Например заголовоки новостей:
1. Белка
2. Барсук
3. бегемот
4. Шаурма
5. Лавашь
Как вывести новости начинающиеся с буквы «Б» и т.п.
Решение тут
1. Белка
2. Барсук
3. бегемот
4. Шаурма
5. Лавашь
Как вывести новости начинающиеся с буквы «Б» и т.п.
Решение тут
Комментарии: 18
...where...like=Б%…
только как реализовать? через pdotools или снипет надо писать?
Это зависит от вашей задачи.
Сформулируйте задачу максимально полно и вам обязательно подскажут наиболее рациональное решение :)
Сформулируйте задачу максимально полно и вам обязательно подскажут наиболее рациональное решение :)
50-100к новостей надо выводить по начальным буквам и цифрам
site.ru/news/A
site.ru/news/B
site.ru/news/7
site.ru/news/A
site.ru/news/B
site.ru/news/7
Уточнение.
1. У новостей один родитель?
2. Постраничная навигация будет?
3. На одной странице только новости на одну букву?
…
ajax не рассматриваете?
1. У новостей один родитель?
2. Постраничная навигация будет?
3. На одной странице только новости на одну букву?
…
ajax не рассматриваете?
Делал алфавитный рубрикатор GetResources+ajax. Если интересно, могу поделиться.
если вы имеете виду создавать категорию для каждого раздела и туда закидывать, то это не очень приемлемо. Как вариант юзать аддон modx.com/extras/package/tagger где указывать букву
Закажите плагин для pdoPage который будет парсить первую букву pagetitle или longtitle и по ним выводить пагинацию. На modstore.pro есть каталог разработчиков.
Или по простому &where=LIKE=А% OR a% для вывода pdoPage и несколько закладок на одной странице для каждой буквы. В каждой закладке вызов pdoPage с &where=LIKE=букваалфавита% который вызывается ajax'om по клику на вкладке.
Нет. Я сделал через сниппет (GetResources+ajax). При нажатии на букву загрузка только ресурсов при совпадении первой буквы в названии.
Использовал вот этот пример: modx.ws/urok-modx-ajax-zagruzka-resursov
Использовал вот этот пример: modx.ws/urok-modx-ajax-zagruzka-resursov
Поделитесь, буду сильно благодарен!
Спасибо большое!
а вообще, если не жалко выложили бы в «готовые решения», это помогло бы развитию Modx
Ну как бы готового решения нет, но оформил в инструкцию:
modx.pro/howto/4854-alphabetical-index-of-resources-for-modx-revo/
modx.pro/howto/4854-alphabetical-index-of-resources-for-modx-revo/
Берём заметку про роутинг, сниппет pdoResources с его параметром where, и за полчаса делаем симпатичный вывод каталога по ссылкам типа
site.ru/catalog/А site.ru/catalog/Б site.ru/catalog/В
у меня вышло как то так, но не работает. Шаблон стандартный
<?php
if ($modx->event->name != 'OnPageNotFound') {return false;}
$alias = $modx->context->getOption('request_param_alias', 'q');
if (!isset($_REQUEST[$alias])) {return false;}
$request = $_REQUEST[$alias];
$tmp = explode('/', $request);
// Ссылка подходит под заданный формат: brands/brandname
if ($tmp[0] == 'genre' && count($tmp) >= 2) {
// Определяем id раздела /brands/.
// Конечно, можно его и руками прописать - но так гибче
if (!$section = $modx->findResource($tmp[0] . '/')) {
// Если вдруг раздел куда-то делся - выходим.
return false;
}
// Теперь очищаем имя бренда от возможного расширения
$name = str_replace('.html', '', $tmp[1]);
// Если очищенное имя не равно запрошенному - то можно отредиректить юзера
// Также возможен вариант с косой на конце имени бренда - его тоже учитываем
// SEOшники должны оценить =)
if ($tmp[1] != $name || (isset($tmp[2]) && $tmp[2] == '')) {
$modx->sendRedirect($tmp[0] . '/' . $name);
}
// Люди с неправильной ссылкой ушли на правильную и дошли до этого момента со второго раза
// Дальше проверяем наличие запрошенного бренда
if ($genre = $modx->getObject('modResource', array('pagetitle:LIKE' => $name . "%"))) {
$newsParams = array();
$newsParams['parents'] = '2';
$newsParams['depth'] = '0';
$newsParams['showLog'] = '1';
$newsParams['where'] = '{"pagetitle:LIKE": "' . $name .'%"}';
return $modx->runSnippet('pdoResources', $newsParams);
} else {
//для теста
echo '<pre>';
print_r($_REQUEST);
print_r($_SERVER);
die();
}
}
Logs:[2015-02-18 21:54:58] (ERROR @ /index.php) [OnPageNotFound]<pre>Array
(
[id] => 5
[type] => document
[contentType] => text/html
[pagetitle] => Quest
[longtitle] =>
[description] =>
[alias] => quest
[link_attributes] =>
[published] => 1
[pub_date] => 0
[unpub_date] => 0
[parent] => 2
[isfolder] => 1
[introtext] =>
[richtext] => 1
[template] => 3
[menuindex] => 0
[searchable] => 1
[cacheable] => 1
[createdby] => 1
[createdon] => 1423186205
[editedby] => 1
[editedon] => 1423834707
[deleted] => 0
[deletedon] => 0
[deletedby] => 0
[publishedon] => 1423186200
[publishedby] => 1
[menutitle] =>
[donthit] => 0
[privateweb] => 0
[privatemgr] => 0
[content_dispo] => 0
[hidemenu] => 0
[class_key] => TicketsSection
[context_key] => web
[content_type] => 1
[uri] => games/quest/
[uri_override] => 0
[hide_children_in_tree] => 0
[show_in_tree] => 1
[properties] => Array
(
[tickets] => Array
(
[template] =>
[uri] => %alias%ext
[show_in_tree] =>
[hidemenu] => 0
[disable_jevix] =>
[process_tags] =>
)
)
[idx] => 1
[link] =>
)
</pre><pre class="pdoResourcesLog">0.0001979: pdoTools loaded
0.0000629: xPDO query object created
0.0006740: Added selection of <b>modResource</b>: <small>SQL_CALC_FOUND_ROWS `id`, `type`, `contentType`, `pagetitle`, `longtitle`, `description`, `alias`, `link_attributes`, `published`, `pub_date`, `unpub_date`, `parent`, `isfolder`, `introtext`, `richtext`, `template`, `menuindex`, `searchable`, `cacheable`, `createdby`, `createdon`, `editedby`, `editedon`, `deleted`, `deletedon`, `deletedby`, `publishedon`, `publishedby`, `menutitle`, `donthit`, `privateweb`, `privatemgr`, `content_dispo`, `hidemenu`, `class_key`, `context_key`, `content_type`, `uri`, `uri_override`, `hide_children_in_tree`, `show_in_tree`, `properties`</small>
0.0000570: Processed additional conditions
0.0007119: Added where condition: <b>pagetitle:LIKE=Q%, modResource.parent:IN(2), modResource.published=1, modResource.deleted=0</b>
0.0001462: Sorted by <b>modResource.publishedon</b>, <b>DESC</b>
0.0000060: Limited to <b>10</b>, offset <b>0</b>
0.0005710: SQL prepared <small>"SELECT SQL_CALC_FOUND_ROWS `modResource`.`id`, `modResource`.`type`, `modResource`.`contentType`, `modResource`.`pagetitle`, `modResource`.`longtitle`, `modResource`.`description`, `modResource`.`alias`, `modResource`.`link_attributes`, `modResource`.`published`, `modResource`.`pub_date`, `modResource`.`unpub_date`, `modResource`.`parent`, `modResource`.`isfolder`, `modResource`.`introtext`, `modResource`.`richtext`, `modResource`.`template`, `modResource`.`menuindex`, `modResource`.`searchable`, `modResource`.`cacheable`, `modResource`.`createdby`, `modResource`.`createdon`, `modResource`.`editedby`, `modResource`.`editedon`, `modResource`.`deleted`, `modResource`.`deletedon`, `modResource`.`deletedby`, `modResource`.`publishedon`, `modResource`.`publishedby`, `modResource`.`menutitle`, `modResource`.`donthit`, `modResource`.`privateweb`, `modResource`.`privatemgr`, `modResource`.`content_dispo`, `modResource`.`hidemenu`, `modResource`.`class_key`, `modResource`.`context_key`, `modResource`.`content_type`, `modResource`.`uri`, `modResource`.`uri_override`, `modResource`.`hide_children_in_tree`, `modResource`.`show_in_tree`, `modResource`.`properties` FROM `modx_site_content` AS `modResource` WHERE ( `modResource`.`pagetitle` LIKE 'Q%' AND `modResource`.`parent` IN (2) AND `modResource`.`published` = 1 AND `modResource`.`deleted` = 0 ) ORDER BY modResource.publishedon DESC LIMIT 10 "</small>
0.0005012: SQL executed
0.0001271: Total rows: <b>1</b>
0.0000300: Rows fetched
0.0001070: Returning processed chunks
0.0035169: <b>Total time</b>
11 796 480: <b>Memory usage</b>
</pre>
[2015-02-18 21:54:58] (ERROR @ /index.php) Could not retrieve data to cache for resource 1
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.