/** * Get category items * * @param int $limit * @param int $page * @return array */ public function getItems($limit = null, $page = null) { $rows = []; $dateFields = ['publish', 'expire', 'created', 'updated', 'uploaded']; if (isset($this->data['id'])) { $sql = Table\CategoryItems::sql(); $sql->select([0 => '*', 'content_title' => DB_PREFIX . 'content.title', 'media_title' => DB_PREFIX . 'media.title'])->join(DB_PREFIX . 'content', [DB_PREFIX . 'category_items.content_id' => DB_PREFIX . 'content.id'])->join(DB_PREFIX . 'content_types', [DB_PREFIX . 'content_types.id' => DB_PREFIX . 'content.type_id'])->join(DB_PREFIX . 'media', [DB_PREFIX . 'category_items.media_id' => DB_PREFIX . 'media.id'])->join(DB_PREFIX . 'media_libraries', [DB_PREFIX . 'media_libraries.id' => DB_PREFIX . 'media.library_id'])->where('category_id = :category_id'); $s = ' AND ((' . $sql->quoteId('media_id') . ' IS NOT NULL) OR ((' . $sql->quoteId('media_id') . ' IS NULL) AND (((' . $sql->quoteId('strict_publishing') . ' = 1) AND (' . $sql->quoteId('publish') . ' <= NOW())) OR (' . $sql->quoteId('strict_publishing') . ' = 0)) AND ((' . $sql->quoteId('expire') . ' IS NULL) OR (' . $sql->quoteId('expire') . ' > NOW())) AND (' . $sql->quoteId('status') . ' = 1)))'; if (null !== $limit) { $page = null !== $page && (int) $page > 1 ? $page * $limit - $limit : null; $sql->select()->limit($limit)->offset($page); } if (isset($this->data['order_by_field']) && isset($this->data['order_by_field'])) { $by = $this->data['order_by_field']; $order = $this->data['order_by_order']; } else { $by = DB_PREFIX . 'category_items.order'; $order = 'ASC'; } $sql->select()->orderBy($by, $order); $s = str_replace('ORDER BY', $s . ' ORDER BY', (string) $sql); $rows = Table\CategoryItems::execute($s, ['category_id' => $this->id])->rows(false); } if (count($rows)) { foreach ($rows as $key => $value) { if (class_exists('Phire\\Fields\\Model\\FieldValue')) { if (!empty($value['media_id'])) { $item = \Phire\Fields\Model\FieldValue::getModelObject('Phire\\Media\\Model\\Media', [$value['media_id']], 'getById', $this->data['filters']); } else { $item = \Phire\Fields\Model\FieldValue::getModelObject('Phire\\Content\\Model\\Content', [$value['content_id']], 'getById', $this->data['filters']); } $value = array_merge((array) $value, $item->toArray()); } else { if (!empty($value['media_id'])) { $media = new \Phire\Media\Model\Media(); $media->getById($value['media_id']); $value = array_merge((array) $value, $media->toArray()); } } foreach ($value as $ky => $vl) { if (in_array($ky, $dateFields)) { $dateValues = $this->formatDateAndTime($vl); foreach ($dateValues as $k => $v) { $value[$ky . '_' . $k] = $v; } } } $rows[$key] = new \ArrayObject($value, \ArrayObject::ARRAY_AS_PROPS); } } return $rows; }