vinegredz Posted May 6, 2019 Share Posted May 6, 2019 Здравствуйте. Подскажите, как можно сделать запрос базе данных без учета прав доступа? У меня есть база данных в которой пользователи могут видеть только свои записи. И есть код, который выводит в нужном мне месте список записей из этой базы данных: {{$table = new \IPS\Helpers\Table\Content('IPS\cms\Records2', $record->url(), array( array('field_7 = ? and field_57 = ?', $record->_id, 'none' ) ));}} {{$table->tableTemplate = array(\IPS\cms\Theme::i()->getTemplate('face_listing', 'cms', 'database'), 'categoryTable');}} {{$table->rowsTemplate = array(\IPS\cms\Theme::i()->getTemplate('face_listing', 'cms', 'database'), 'recordRow');}} {$table|raw} Конечно, этот код выводит список записей с учетом прав доступа, а я не могу разобраться на каком этапе срабатывает фильтр, который отсекает все записи в которых авторизованный юзер не является автором. Подскажите, как вообще делаются запросы без учета прав доступа? Link to comment Share on other sites More sharing options...
newbie Posted May 6, 2019 Share Posted May 6, 2019 \system\Helpers\Table\Content.php /** * Constructor * * @param string $class Content Class Name * @param \IPS\Http\Url $baseUrl Base URL * @param array|null $where WHERE clause (To restrict to a node, use $container instead) * @param \IPS\Node\Model|NULL $container The container * @param bool|null $includeHidden Flag to pass to getItemsWithPermission() method for $includeHiddenContent, defaults to NULL * @param string|NULL $permCheck Permission key to check * @param bool $honorPinned Show pinned topics at the top of the table * @param bool $showMovedLinks Show moved links in the result set. * @param NULL|callable $callback Method to call to prepare the returned rows * @return void */ public function __construct( $class, \IPS\Http\Url $baseUrl, $where=NULL, \IPS\Node\Model $container=NULL, $includeHidden=\IPS\Content\Hideable::FILTER_AUTOMATIC, $permCheck='view', $honorPinned=TRUE, $showMovedLinks=FALSE, $callback=NULL ) 6-ой параметр Link to comment Share on other sites More sharing options...
vinegredz Posted May 6, 2019 Author Share Posted May 6, 2019 Спасибо, разобрался и даже чуть больше знаю теперь как всем этим управлять. Вот решение для тех, кто будет после меня: {{$table = new \IPS\Helpers\Table\Content('IPS\cms\Records2', $record->url(), array( array('field_7 = ? and field_57 = ?', $record->_id, 'none' ) ), NULL, NULL, NULL);}} {{$table->tableTemplate = array(\IPS\cms\Theme::i()->getTemplate('face_listing', 'cms', 'database'), 'categoryTable');}} {{$table->rowsTemplate = array(\IPS\cms\Theme::i()->getTemplate('face_listing', 'cms', 'database'), 'recordRow');}} {$table|raw} Здесь нужно было в первой строке добавить ", NULL, NULL, NULL", тогда права доступа игнорируются и на странице выводятся все записи из базы данных, даже если в настройках базы данных указано, что юзеры не могут видеть чужих записей. Link to comment Share on other sites More sharing options...
vinegredz Posted May 6, 2019 Author Share Posted May 6, 2019 А я же правильно понял что в function __construct нет аргумента для порядка сортировки записей? Link to comment Share on other sites More sharing options...
newbie Posted May 7, 2019 Share Posted May 7, 2019 А я же правильно понял что в function __construct нет аргумента для порядка сортировки записей?Все верно. Можете сами задать через $table->sortBy Link to comment Share on other sites More sharing options...
vinegredz Posted May 7, 2019 Author Share Posted May 7, 2019 Спасибо. Вот решение для тех, кто будет после меня. {{$table->sortDirection = \IPS\Request::i()->sortdirection ? $rows->sortDirection : 'asc';}} Link to comment Share on other sites More sharing options...
vinegredz Posted May 10, 2019 Author Share Posted May 10, 2019 И снова вынужден вернуться в вопрос. Как из этого: {{$table->sortDirection = \IPS\Request::i()->sortdirection ? $rows->sortDirection : 'asc';}} Сделать случайный порядок вывода записей из базы данных? Link to comment Share on other sites More sharing options...
siv1987 Posted May 10, 2019 Share Posted May 10, 2019 Случайный порядок отобраных записей или случайные записи? Выбор случайных записей не самый оптимальный sql запрос с точки зрения производительности. Link to comment Share on other sites More sharing options...
vinegredz Posted May 10, 2019 Author Share Posted May 10, 2019 Именно случайный порядок вывода. То есть мне нужно получить все записи из базы данных, но вывести их на странице в случайном порядке. RAND() мне не подойдет. Link to comment Share on other sites More sharing options...
siv1987 Posted May 11, 2019 Share Posted May 11, 2019 Нужно получить массив из бд и перемещать его в php в случайном порядке. Параметрами сортировки в запросе можно если только отбираются конкретные записи по ид. Сделать такое можно попрбовать через join, но для этого нужно писать кастомный sql запрос. Как он сочитается с таблицами IPS я сказать не могу, не работал с ними. Link to comment Share on other sites More sharing options...
vinegredz Posted June 9, 2019 Author Share Posted June 9, 2019 (edited) Товарищи, борюсь с задачей все еще. Подскажите, почему не работает сортировка по полю 'field_19'? {{$table = new \IPS\Helpers\Table\Content('IPS\cms\Records2', $record->url(), array( array('field_7 = ? and field_57 = ?', $record->_id, 'none' ) ), NULL, NULL, NULL);}} {{$table->tableTemplate = array(\IPS\cms\Theme::i()->getTemplate('face_listing', 'cms', 'database'), 'categoryTable');}} {{$table->rowsTemplate = array(\IPS\cms\Theme::i()->getTemplate('face_listing', 'cms', 'database'), 'recordRow');}} {{$table->sortDirection = \IPS\Request::i()->sortdirection ? $table->sortDirection : 'desc';}} {{$table->sortBy = \IPS\Request::i()->sortby ? $table->sortBy : 'field_19';}} {{$table->limit = 32;}} {$table|raw} Пробовал и так ,как в документации, но все равно не работает: {{$table->sortBy = $table->sortBy ?: 'field_19';}} {{$table->sortDirection = $table->sortDirection ?: 'desc';}} Edited June 9, 2019 by vinegredz Link to comment Share on other sites More sharing options...
TemKa_SD Posted June 10, 2019 Share Posted June 10, 2019 (edited) Попробуйте так: $table->sortBy = $table->sortBy ?: 'field_19'; Ой, вы пробовали. А как что именно не работает? Не изменяется порядок записей совсем? Edited June 10, 2019 by TemKa_SD Link to comment Share on other sites More sharing options...
vinegredz Posted June 10, 2019 Author Share Posted June 10, 2019 Да, порядок вывода записей просто не меняется при смене колонки в: {{$table->sortBy = \IPS\Request::i()->sortby ? $table->sortBy : 'field_19';}} Но меняется, при смене направления сортировки в: {{$table->sortDirection = \IPS\Request::i()->sortdirection ? $table->sortDirection : 'desc';}} По этой причине я более менее уверен в синтаксисе, но ощущение, что забыл какой-то дополнительный параметр (хотя опять таки в документации я его не заметил). Если что, field_19 это колонка с числовым содержимым, стороковых данных в нем нет. Link to comment Share on other sites More sharing options...
newbie Posted June 10, 2019 Share Posted June 10, 2019 В "контентовых" таблицах сортировать можно только по определенным опциям, которые указаны в $table->sortOptions Link to comment Share on other sites More sharing options...
vinegredz Posted June 10, 2019 Author Share Posted June 10, 2019 Спасибо. Вот работающий код сортировки по кастомному полю: {{$table->sortOptions = array( 'field_19' );}} {{$table->sortBy = 'field_19';}} {{$table->sortDirection = 'desc';}} Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now