public static function loadCategoryPathsForArray(&$productArray) { foreach ($productArray as $product) { $cond = lte('Category.lft', $product['Category']['lft']); $cond->addAnd(gte('Category.rgt', $product['Category']['rgt'])); $conditions[] = $cond; } $filter = select(Condition::mergeFromArray($conditions, true)); $filter->setOrder(f('Category.lft')); $categories = ActiveRecord::getRecordSetArray('Category', $filter); foreach ($productArray as &$product) { $product['Categories'] = array(); $names = array(); foreach ($categories as &$category) { if ($category['lft'] <= $product['Category']['lft'] && $category['rgt'] >= $product['Category']['rgt']) { $product['Categories'][] =& $category; $names[] = $category['name_lang']; } } array_shift($names); $product['category_path'] = implode(' > ', $names); $product['category_path_slash'] = implode(' / ', $names); $product['category_name'] = count($names) > 0 ? array_pop($names) : ''; } }
function select() { return new ARSelectFilter(Condition::mergeFromArray(func_get_args())); }
public static function loadSubConditions(ARSet $conditionSet) { $cond = array(); foreach ($conditionSet as $condition) { if ($condition->hasSubConditions()) { $cond[] = $condition->getChildNodeCondition(); } } if (!$cond) { return new ARSet(); } $f = new ARSelectFilter(Condition::mergeFromArray($cond, true)); $subConditions = ActiveRecordModel::getRecordSet(__CLASS__, $f); foreach ($subConditions as $condition) { $condition->parentNode->get()->registerSubCondition($condition); } return $subConditions; }
/** * Create an ActiveRecord Condition object to use for product selection * * @return Condition */ public function getCondition() { $specField = $this->filterGroup->get()->specField->get(); // number range if ($specField->isSimpleNumbers()) { $field = new ARExpressionHandle($this->getJoinAlias() . '.value'); $conditions = array(); if ($this->rangeStart->get()) { $conditions[] = new EqualsOrMoreCond($field, $this->rangeStart->get()); } if ($this->rangeEnd->get()) { $conditions[] = new EqualsOrLessCond($field, $this->rangeEnd->get()); } $cond = Condition::mergeFromArray($conditions); } elseif ($specField->isDate()) { $field = new ARExpressionHandle($this->getJoinAlias() . '.value'); $conditions = array(); if ($this->rangeDateStart->get()) { $conditions[] = new EqualsOrMoreCond($field, $this->rangeDateStart->get()); } if ($this->rangeDateEnd->get()) { $conditions[] = new EqualsOrLessCond($field, $this->rangeDateEnd->get()); } $cond = Condition::mergeFromArray($conditions); } else { throw new ApplicationException('Filter type not supported'); } return $cond; }
protected function getDateCondition(ARFieldHandle $handle) { $conds = array(); if ($this->from) { $conds[] = new EqualsOrMoreCond($handle, $this->from); } if ($this->to) { $conds[] = new EqualsOrLessCond($handle, $this->to); } if ($conds) { return Condition::mergeFromArray($conds); } }