Esempio n. 1
0
 /**
  * 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));
 }
Esempio n. 2
0
 /**
  * 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;
 }