From 0d1c6fc8fdfe03b695d79defecf9dcb2e7e64eee Mon Sep 17 00:00:00 2001 From: tDidierjean Date: Tue, 3 Jan 2012 09:22:42 +0000 Subject: [PATCH] // getProductLink fix and optimization git-svn-id: http://dev.prestashop.com/svn/v1/branches/1.5.x@12028 b9a71923-0436-4b27-9f14-aed3839534dd --- classes/Link.php | 7 ++--- classes/ObjectModel.php | 28 +++++++++++++++++++ controllers/admin/AdminProductsController.php | 4 +-- 3 files changed, 33 insertions(+), 6 deletions(-) diff --git a/classes/Link.php b/classes/Link.php index 9b5fce8f1..e464e2f7a 100644 --- a/classes/Link.php +++ b/classes/Link.php @@ -94,15 +94,14 @@ class LinkCore throw new PrestashopException('Invalid product vars'); } - // Set available keywords $params = array(); $params['id'] = $product->id; - $params['rewrite'] = (!$alias) ? $product->link_rewrite : $alias; + $params['rewrite'] = (!$alias) ? $product->getFieldByLang('link_rewrite') : $alias; $params['ean13'] = (!$ean13) ? $product->ean13 : $ean13; $params['category'] = (!$category) ? $product->category : $category; - $params['meta_keywords'] = Tools::str2url($product->meta_keywords); - $params['meta_title'] = Tools::str2url($product->meta_title); + $params['meta_keywords'] = Tools::str2url($product->getFieldByLang('meta_keywords')); + $params['meta_title'] = Tools::str2url($product->getFieldByLang('meta_title')); if ($dispatcher->hasKeyword('product_rule', 'manufacturer')) $params['manufacturer'] = Tools::str2url($product->isFullyLoaded ? $product->manufacturer_name : Manufacturer::getNameById($product->id_manufacturer)); diff --git a/classes/ObjectModel.php b/classes/ObjectModel.php index bf626c7e8..e7df953e5 100644 --- a/classes/ObjectModel.php +++ b/classes/ObjectModel.php @@ -1267,4 +1267,32 @@ abstract class ObjectModelCore { } + + /** + * Return the field value for the specified language if the field is multilang, else the field value. + * + * @param $field_name + * @param null $id_lang + * @return mixed + * @throws PrestashopException + * @since 1.5 + */ + public function getFieldByLang($field_name, $id_lang = null) + { + $definition = ObjectModel::getDefinition($this); + // Is field in definition? + if ($definition && isset($definition['fields'][$field_name])) + { + $field = $definition['fields'][$field_name]; + // Is field multilang? + if (isset($field['lang']) && $field['lang']) + { + if (is_array($this->{$field_name})) + return $this->{$field_name}[$id_lang ? $id_lang : Context::getContext()->language->id]; + } + return $this->{$field_name}; + } + else + throw new PrestashopException('Could not load field from definition.'); + } } diff --git a/controllers/admin/AdminProductsController.php b/controllers/admin/AdminProductsController.php index ea0992303..93b708f3a 100644 --- a/controllers/admin/AdminProductsController.php +++ b/controllers/admin/AdminProductsController.php @@ -2165,7 +2165,7 @@ class AdminProductsControllerCore extends AdminController return false; $preview_url = $this->context->link->getProductLink( - $this->getFieldValue($product, 'id'), + $product, $this->getFieldValue($product, 'link_rewrite', $this->context->language->id), Category::getLinkRewrite($product->id_category_default, $this->context->language->id), null, null, Context::getContext()->shop->getID()); if (!$product->active) @@ -2175,7 +2175,7 @@ class AdminProductsControllerCore extends AdminController $token = Tools::encrypt('PreviewProduct'.$product->id); if (strpos($preview_url, '?') === false) $preview_url .= '?'; - $preview_url = ($this->context->link->getProductLink($this->getFieldValue($product, 'id'), $this->getFieldValue($product, 'link_rewrite', $this->default_form_language), Category::getLinkRewrite($this->getFieldValue($product, 'id_category_default'), $this->context->language->id))); + $preview_url = ($this->context->link->getProductLink($product, $this->getFieldValue($product, 'link_rewrite', $this->default_form_language), Category::getLinkRewrite($this->getFieldValue($product, 'id_category_default'), $this->context->language->id))); if (!$product->active) { $admin_dir = dirname($_SERVER['PHP_SELF']);