UMIhelp

Разработка сайта на UMI.CMS => Макросы UMI.CMS => Тема начата: andrey от 21 Февраля 2014, 14:18:32

Название: По umiField получить значения
Отправлено: andrey от 21 Февраля 2014, 14:18:32
У меня есть umiField,  к примеру типа float мне нужно получить минимальное и максимальное из значений, которые есть в системе.

Не пойму как это сделать.
Название: Re:По umiField получить значения
Отправлено: andrey от 24 Февраля 2014, 14:32:41
При помощи тех.поддержки набросал такое решение:

// Максимальное и минимальное значения поля, приводится к int
public function fieldMinMax( $fieldId, $object_type_id )
{
$field = umiFieldsCollection::getInstance()->getField( $fieldId );
$field_name = $field->getName();


//Получаем все страницы с полученными типами
$sel = new selector( 'pages' );
$sel->types( 'object-type' )->id( $object_type_id );


//Находим минимальное и максимальное значение
$max = 0;
$min = 10000000;
foreach ( $sel as $page )
{
$val = intval( $page->getValue( $field_name ) );
if ( $val > $max )
{
$max = $val;
}

if ( $val < $min )
{
$min = $val;
}
}

return array(
'min' => $min,
'max' => $max
);
}
Название: Re:По umiField получить значения
Отправлено: e.ioffe от 24 Февраля 2014, 16:37:32
При помощи тех.поддержки набросал такое решение:

// Максимальное и минимальное значения поля, приводится к int
public function fieldMinMax( $fieldId, $object_type_id )
{
$field = umiFieldsCollection::getInstance()->getField( $fieldId );
$field_name = $field->getName();


//Получаем все страницы с полученными типами
$sel = new selector( 'pages' );
$sel->types( 'object-type' )->id( $object_type_id );


//Находим минимальное и максимальное значение
$max = 0;
$min = 10000000;
foreach ( $sel as $page )
{
$val = intval( $page->getValue( $field_name ) );
if ( $val > $max )
{
$max = $val;
}

if ( $val < $min )
{
$min = $val;
}
}

return array(
'min' => $min,
'max' => $max
);
}

Странный ответ от техподдержки, так как все можно сделать двумя запросами к базе без цикла:

$minSel = new selector('pages');
$minSel->types( 'object-type' )->id( $object_type_id );
$minSel->order($field_name)->asc();
$minSel->limit(0, 1);
$min = 0;
if($minSel->length > 0)
$min = $minSel->result[0]->getValue($field_name);
$minSel->flush();

$maxSel = new selector('pages');
$maxSel->types( 'object-type' )->id( $object_type_id );
$maxSel->order($field_name)->desc();
$maxSel->limit(0, 1);
$max = 0;
if($maxSel->length > 0)
$max = $maxSel->result[0]->getValue($field_name);