/** * Update product SEO options * * @param $id = Product ID */ public function action_update_seo($id = false) { if (!is_numeric($id)) { \Response::redirect('admin/product/list'); } // Get news item to edit if (!($item = Model_Product::find_one_by_id($id))) { \Response::redirect('admin/product/list'); } \View::set_global('title', 'Edit Meta Content'); if (\Input::post()) { $val = Model_Product_Seo::validate('update', $item->id); // Get POST values $insert = \Input::post(); if ($val->run($insert)) { // Update SEO database table $item_seo = Model_Product_Seo::find_one_by_content_id($item->id); if ($item_seo) { $item_seo->set($insert); } else { $item_seo = Model_Category_Seo::forge($insert); } try { $item_seo->save(); \Messages::success('Meta content successfully updated.'); \Response::redirect(\Uri::admin('current')); } catch (\Database_Exception $e) { // show validation errors \Messages::error('<strong>There was an error while trying to update meta content</strong>'); // Uncomment lines below to show database errors //$errors = $e->getMessage(); //\Messages::error($errors); } } else { if ($val->error() != array()) { // show validation errors \Messages::error('<strong>There was an error while trying to update meta content</strong>'); foreach ($val->error() as $e) { \Messages::error($e->get_message()); } } } } \Theme::instance()->set_partial('content', $this->view_dir . 'update_seo')->set('product', Model_Product::find_one_by_id($id)); }
/** * Get additional content data selected * * @param $result = Query result */ public static function post_find($result) { $config = \Config::load('stock-option.db'); if ($result !== null) { if (is_array($result)) { foreach ($result as $item) { // It will first check if we already have result in temporary result, // and only execute query if we dont. That way we dont have duplicate queries // Get category products $item->get_products = static::lazy_load(function () use($item, $config) { $products = Model_Product_To_Categories::find(function ($query) use($item) { return $query->where('category_id', $item->id); }, 'product_id'); if (!empty($products)) { $products = '(' . implode(',', array_keys($products)) . ')'; return Model_Product::find(function ($query) use($products, $item, $config) { $query->select('product.*'); if ($config['hide_out_of_stock']) { $query->join('product_attributes'); $query->on('product.id', '=', 'product_attributes.product_id'); $query->where('product_attributes.stock_quantity', '>', 0); } $query->and_where('product.id', 'IN', \DB::expr($products)); $query->group_by('product.id'); $query->order_by('product.sort', 'asc'); // print_r((string)$query); // die; return $query; }, 'id'); } return array(); }, $item->id, 'products'); // Get all category products (including subcategory products) $item->get_all_products = static::lazy_load(function () use($item) { $categories_ids = \Product\Model_Category::get_all_children($item); $products = Model_Product_To_Categories::find(function ($query) use($item, $categories_ids) { return $query->where('category_id', 'in', $categories_ids); }, 'product_id'); if (!empty($products)) { $products = '(' . implode(',', array_keys($products)) . ')'; return Model_Product::find(function ($query) use($products, $item) { $query->where('id', 'IN', \DB::expr($products)); $query->order_by('sort', 'asc'); return $query; }, 'id'); } return array(); }, $item->id, 'all_products'); // Get content images $item->get_images = static::lazy_load(function () use($item) { return Model_Category_Image::find(array('where' => array('content_id' => $item->id), 'order_by' => array('sort' => 'asc'))); }, $item->id, 'images'); // Get content children $item->get_children = static::lazy_load(function () use($item) { return \Product\Model_Category::find(array('where' => array('parent_id' => $item->id), 'order_by' => array('sort' => 'asc'))); }, $item->id, 'children'); // Get content children $item->get_seo = static::lazy_load(function () use($item) { return Model_Category_Seo::find_one_by_content_id($item->id); }, $item->id, 'seo', 'object'); } } } // return the result return $result; }