/** * zmiana nadrzędnej kategorii */ public function onMove() { $result = false; $nodeId = post('node_id'); $parentId = post('parent_id'); $nodeStauts = post('status'); $order = post('order', 0); if (isset($nodeId, $parentId) && $nodeId !== $parentId) { $item = Category::find($nodeId); if ($item && $item->parent_id !== (int) $parentId) { $item->parent_id = (int) $parentId ?: null; $item->order = $order; $item->save(); $result = count($item->getParents()); } } return ['result' => $result]; }
/** * pobieranie listy postów wg parametrów * @param array $params parametry * @return Collection */ public static function getPosts(array $params, $query = null) { extract(array_merge(['post_id' => null, 'category' => null, 'categories_id' => [], 'template_id' => null, 'additional' => [], 'limit' => 0, 'tags' => false, 'post_tags' => [], 'promoted' => false, 'random' => false, 'subcategories' => false, 'category' => null, 'order' => 'published_at DESC', 'pagination' => false, 'posts_per_page' => 10, 'page' => 1], $params)); $query = $query ?: Post::published()->with('template'); // post_id if ($post_id) { $query->where('id', '<>', $post_id); } // categories_id // ustawione na sztywno id kategorii; nadpisują kategorię if ($categories_id) { $categories_id = is_array($categories_id) ? $categories_id : explode(',', $categories_id); $category = Category::find($categories_id); } elseif (!$category instanceof Category) { // category $category = Category::find($category); } // subcategories // pobieranie id podkategorii i kategorii, jeśli subcategories = true // w przeciwnym wypadku pobieranie id kategorii if ($category && !$categories_id) { if ($category instanceof Category) { $categories_id = $subcategories ? $category->getSubcategoriesId() : [$category->id]; } else { $categories_id = []; foreach ($category as $c) { $categories_id = $categories_id + ($subcategories ? $c->getSubcategoriesId() : [$c->id]); } } } // template_id if ($template_id) { $query->whereIn('template_id', is_array($template_id) ? $template_id : explode(',', $template_id)); } // random if ($random) { $query->orderByRaw("RANDOM()"); } else { $query->orderByRaw($order); } // additional if ($additional) { $additional = is_array($additional) ? $additional : [$additional]; $key = array_search('variable', $additional); if ($key && isset(${$key})) { $additional[$key] = ${$key}; } $query->additional($additional); } // promoted if ($promoted) { $query->additional(['is_promoted' => '1']); } // limit if ($limit) { $query->limit($limit); } $query->where(function ($q) use($tags, $post_tags, $categories_id, $category) { // tags if ($tags && $post_tags) { $q->whereHas('tags', function ($q) use($post_tags) { $q->whereIn('id', array_fetch($post_tags->toArray(), 'id')); }); } // categories if ($categories_id) { $q->whereIn('category_id', $categories_id); } // collection if (isset($category->collection)) { $collection = is_array($category->collection) ? $category->collection : [$category->collection]; $q->orWhereIn(Db::raw("additional->>'collection'"), array_map('strval', $collection)); } }); $posts = $pagination ? $query->paginate($posts_per_page, $page) : $query->get(); return $posts; }