Случайный выбор ресурсов

Николай, добрый день. Нужно выводить несколько случайных ресурсов через процессор getdocs (shopmodx). Можно ли это сделать? Я пробовал запускать через консоль — ругается на RAND().

Александр, привет. Вставь там, где ругается: $s = $c->prepare(); print $c->toSQL();

$s->execute();

print '<pre>'; print_r($s->errorInfo()); Пришли результаты $c->toSQL() и $s->errorInfo().

В процессоре: //-------------------------------------------------------------- public function prepareQueryBeforeCount(xPDOQuery $c) { $c->where(array( 'parent' => $this->getProperty('parent'), ));

    if($this->getProperty('sort')=='rand')
        $c->sortBy('RAND()');

$s = $c->prepare(); print $c->toSQL();

$s->execute();

print '<pre>'; print_r($s->errorInfo()); return $c; } } выдает SELECT modResource.id AS modResource_id, modResource.type AS modResource_type, modResource.contentType AS modResource_contentType, modResource.pagetitle AS modResource_pagetitle, modResource.longtitle AS modResource_longtitle, modResource.description AS modResource_description, modResource.alias AS modResource_alias, modResource.link_attributes AS modResource_link_attributes, modResource.published AS modResource_published, modResource.pub_date AS modResource_pub_date, modResource.unpub_date AS modResource_unpub_date, modResource.parent AS modResource_parent, modResource.isfolder AS modResource_isfolder, modResource.introtext AS modResource_introtext, modResource.content AS modResource_content, modResource.richtext AS modResource_richtext, modResource.template AS modResource_template, modResource.menuindex AS modResource_menuindex, modResource.searchable AS modResource_searchable, modResource.cacheable AS modResource_cacheable, modResource.createdby AS modResource_createdby, modResource.createdon AS modResource_createdon, modResource.editedby AS modResource_editedby, modResource.editedon AS modResource_editedon, modResource.deleted AS modResource_deleted, modResource.deletedon AS modResource_deletedon, modResource.deletedby AS modResource_deletedby, modResource.publishedon AS modResource_publishedon, modResource.publishedby AS modResource_publishedby, modResource.menutitle AS modResource_menutitle, modResource.donthit AS modResource_donthit, modResource.privateweb AS modResource_privateweb, modResource.privatemgr AS modResource_privatemgr, modResource.content_dispo AS modResource_content_dispo, modResource.hidemenu AS modResource_hidemenu, modResource.class_key AS modResource_class_key, modResource.context_key AS modResource_context_key, modResource.content_type AS modResource_content_type, modResource.uri AS modResource_uri, modResource.uri_override AS modResource_uri_override, modResource.hide_children_in_tree AS modResource_hide_children_in_tree, modResource.show_in_tree AS modResource_show_in_tree, modResource.properties AS modResource_properties FROM modx_site_content AS modResource WHERE modResource.parent = 9 ORDER BY RAND() ASC

Array ( [0] => 00000 [1] => [2] => ) и на выходе процессора пусто.

Разобрался. дастаточно было указать sort=RAND(), ничего не надо править в процессоре :)

Здесь у тебя все ОК с SQLем, но ты не там это используешь. Подсчет должен выполняться без всяких order by rand(). А тебя метод prepareQueryBeforeCount. Правильней в initialize() указывать $this->setDefaultProperties(array( 'sort' => 'RAND()', )); Или просто в вызов передавать sort=RAND()

Как раз это тебе и писал :-)

Но к слову, там не все классно в этом плане (сортировок). Сортировка по одному полю — это запросто. А вот сортировка по нескольким полям — это уже не просто так. Поэтому буду думать еще в этом направлении. Чисто из-за того, что там по сути два запроса выполняется и используется два объекта запросов, там сложности в плане вызова единого метода на формирования сортировок. Дело в том, что подсчет надо выполнять без сортировки, а конечный запрос с сортировкой, и на практике там много бывает вариантов, когда единый вариант сложно найти. Но это обязательно будет доработано.

Пожалуйста.