как указать порядок сортировки в ИС?

#
как указать порядок сортировки в ИС?
нужно вывести статьи по убыванию даты или, хотя бы по идентификатору,
где смотреть?
#
Re: как указать порядок сортировки в ИС?
В настройках конкретной ИС.
(В правом меню - Информационные системы, затем в списке инфосистем на карандашик напротив названия нужной ИС).

P.S. И не надо создавать несколько тем с одним и тем же вопросом!
Быстрее вам от этого никто не ответит, а вот желания отвечать вам в принципе - поубавится.
Умейте вести себя на форуме.
Заказов не беру. Консультирую редко.
#
Re: Re: как указать порядок сортировки в ИС?
А если нужно изменить его  в процессе просмотра страницы?
Предположим, кнопку сделать "По убыванию/По возрастанию"
#
Re: как указать порядок сортировки в ИС?
Stepan0v писал(а):
Предположим, кнопку сделать «По убыванию/По возрастанию»
Тут возникает вопрос, по убыванию/возрастанию чего именно?
Названия, даты, порядка сортировки, или всего этого сразу, или в каких-то комбинациях?

Вот вам пример для управления сортировкой по имени. В коде ТДС "Информационная система", в конце, перед блоком
$Informationsystem_Controller_Show
   ->xsl(
      Core_Entity::factory('Xsl')->getByName($xslName)
   )
   ->itemsProperties(TRUE)
   ->show();
добавляете примерно такой код:

// если находимся не в элементе
if($Informationsystem_Controller_Show->item == 0)
{
    // сортируем по имени
    $sorting_field = 'informationsystem_items.name';
    
    // если в запрос есть get-параметр order со значением != 0, то сортируем по убыванию (DESC),
    // иначе сортируем по возрастанию (ASC)
    // пример http://mysite.ru/news/?order=1 - сортируем по убыванию
    $order_direction = !intval(Core_Array::getGet('order', 0)) ? 'ASC' : 'DESC';
    
    $Informationsystem_Controller_Show
        ->informationsystemItems()
            ->queryBuilder()
                ->clearOrderBy()
                ->orderBy($sorting_field, $order_direction);    
}


К сожалению, не имею сейчас возможности этот код проверить, но смысл примерно такой.

Еще про сортировку групп и элементов ИС полезно почитать в файле /modules/informationsystem/controller/show.php, собственно, примерчик почти целиком срисован оттуда. (Разумеется, с поправкой на то, что там - описание _класса_ а здесь - работа с его _экземпляром_)
Заказов не беру. Консультирую редко.
#
Re: Re: как указать порядок сортировки в ИС?
Спасибо.

В общих чертах примерно в этом направлении я и думал.
Но до конкретики пока не дошел.
Как доберусь, буду пробовать.

К сожалению, пока этот синтаксис для меня новый и понимаю его в основном интуитивно.
Поэтому, например get-параметры я получал примерно так $order = $_GET['order'], а потом уже по старинке if else и т.п. Может где-то о нем можно подробнее почитать?

P.S. Стало интересно про http://mysite.ru
Оказалось сайта на нем нет (что странно), но доменное имя зарегистрировано
Цитата:
Информация о домене MYSITE.RU
% By submitting a query to RIPN's Whois Service
% you agree to abide by the following terms of use:
% http://www.ripn.net/about/servpol.html#3.2 (in Russian)
% http://www.ripn.net/about/en/servpol.html#3.2 (in English).

domain: MYSITE.RU
nserver: ns2.rtsnet.ru.
nserver: ns.rtsnet.ru.
state: REGISTERED, DELEGATED, VERIFIED
org: Nonprofit Partnership for the Development of Financial Market RTS
registrar: RU-CENTER-REG-RIPN
admin-contact: https://www.nic.ru/whois
created: 1999.11.03
paid-till: 2012.12.01
free-date: 2013.01.01
source: TCI
#
Re: как указать порядок сортировки в ИС?
Stepan0v писал(а):
К сожалению, пока этот синтаксис для меня новый и понимаю его в основном интуитивно.
Поэтому, например get-параметры я получал примерно так $order = $_GET['order'], а потом уже по старинке if else и т.п. Может где-то о нем можно подробнее почитать?


Получение параметров запроса через метод специального класса Core_Array - это часть API hostcms, почитать про этот класс и его методы подробнее можно в файле /modules/core/array.php

Например, для метода getGet мы видим обращение к более универсальному методу get() с указанием, что данные надо искать в массиве $_GET:
static public function getGet($key, $defaultValue = NULL)
{
   return self::get($_GET, $key, $defaultValue);
}


Универсальный методе get() в свою очередь описан так:
static public function get($array, $key, $defaultValue = NULL)
{
   return is_array($array) && array_key_exists($key, $array) ? $array[$key] : $defaultValue;
}

Если переписать его в более привычном для вас виде, то получится следующий код:
static public function get($array, $key, $defaultValue = NULL)
{
   if(is_array($array) && array_key_exists($key, $array)) {
      return $array[$key];
   } else {
      return $defaultValue;
   }
}
это абсолютно то же самое, только занимает 5 строк вместо одной. Читаемость же и понятность у этих фрагментов примерно одинаковая, если привыкнуть к записи условия в одну строку.

Запись условия в одну строку называется "тренарный условный оператор", и используется во многих языках, в частности аналоги этой записи есть в javascript и в С/С++
Почитать про эту запись можно, например, здесь http://www.php.net/manual/ru/language.expressions.php

Ну а теперь про ваши привычки.
$order = $_GET['order']
- это конечно очень просто и понятно, но не совсем корректно.
Например, если в массиве $_GET нет элемента с индексом order, то в при выполнении данной строки php выдаст вам замечание Notice: Undefined index: order in файл такой-то, строка такая-то (чаще всего оно просто запишется в лог, но может и выдаваться в браузер, это зависит от настроек php на конкретном сервере). А переменная $order примет значение NULL. И не факт, что тот код, который использует эту переменную дальше, будет готов к тому, что она может иметь такое значение.
Другой пример - а представьте, что переменная $_GET у вас внезапно оказалась не массивом. Кстати, это легко сделать - $_GET = 'some string'; и все, это уже строка. И вы у строки пытаетесь получить элемент массива, и опять получаете неявную ошибку.
Поэтому, вместо прямого обращения к элементу массива вам надо писать проверку что это действительно массив, и что элемент этот существует, и если проверка не прошла, то возвращать контролируемое _вами_ значение по умолчанию. Этот код надо было бы вынести в функцию, чтобы не дублировать его всюду многократно. И использовать при любом получении значений любых элементов любых массивов.

Но к счастью, разработчики API HostCMS уже об этом позаботились, и сделали для этого отдельный класс с удобными методами.
Заказов не беру. Консультирую редко.
#
Re: Re: как указать порядок сортировки в ИС?
Спасибо, будем разбираться и писать глупые вопросы в форум... А пока мне assembler привычнее )
Сейчас хоть появилась некоторая ясность, где чего искать и куда смотреть. А то начинаю по сути сразу с шестерки, а документации и примеров не густо.
Надо распечатать себе на стену array.php
Цитата:
если в массиве $_GET нет элемента с индексом order, то в при выполнении данной строки php выдаст вам замечание

Проверка, конечно, есть. На наличие, но не на массив.
#
Re: как указать порядок сортировки в ИС?
Stepan0v писал(а):
Надо распечатать себе на стену array.php
Ну, если идти таким путем, ну вам придется распечатывать себе на стену все php-файлы, что лежат внутри /modules/
Проще в них просто искать нужные фрагменты.
Заказов не беру. Консультирую редко.
#
Re: Re: как указать порядок сортировки в ИС?
Шучу, конечно. Но полноценного описания очень не хватает...
Авторизация