В опенкарт поля meta_keywords meta_description можно заполнить в админке и они записываются успешно в базу данных. Но не выводятся на странице продукта. Поэтому эти поля я решила использовать для оригинального описания товара.
В файле product папки controller сделала записи (здесь много лишних записей, так как решила испробовать всё):
1. $product_info = $this->model_catalog_product->getProduct($product_id);
if ($product_info) {
$url = '';
if (isset($this->request->get['meta_keywords'])) {
$url .= '&meta_keywords=' . $this->request->get['meta_keywords'];
}
if (isset($this->request->get['meta_description'])) {
$url .= '&meta_description=' . $this->request->get['meta_description'];
}
2. $this->data['meta_keywords'] = html_entity_decode($product_info['meta_keywords'], ENT_QUOTES, 'UTF-8');
$this->data['meta_description'] = html_entity_decode($product_info['meta_description'], ENT_QUOTES, 'UTF-8');
3. $this->data['text_meta_keywords'] = $this->language->get('text_meta_keywords');
$this->data['text_descriptions'] = $this->language->get('text_descriptions');
4. $this->data['products'][] = array(
'meta_keywords' => $result['meta_keywords'],
'meta_description' => $result['meta_description'],
5. $this->data['descriptions'] = array();
$results = $this->model_catalog_product->getProductDescription($this->request->get['product_id']);
foreach ($results as $result) {
if ($result['meta_keywords']) {
$this->data['descriptions'][] = array(
'meta_keywords' => $result['meta_keywords']
);
}
if ($result['meta_description']) {
$this->data['descriptions'][] = array(
'meta_description' => $result['meta_description']
);
}
}
6. $this->response->setOutput($this->render(TRUE), $this->config->get('config_compression'));
} else {
$url = '';
if (isset($this->request->get['meta_keywords'])) {
$url .= '&meta_keywords=' . $this->request->get['meta_keywords'];
}
if (isset($this->request->get['meta_description'])) {
$url .= '&meta_description=' . $this->request->get['meta_description'];
}
7. public function review() {
$this->data['reviews'] = array();
$results = $this->model_catalog_review->getReviewsByProductId($this->request->get['product_id'], ($page - 1) * 5, 5);
foreach ($results as $result) {
$this->data['reviews'][] = array(
'meta_keywords' => substr($product_info['meta_keywords'],0,255),
'meta_description' => substr($product_info['meta_description'],0,255),
В файле product.tpl:
1 вариант: <?php if ($descriptions) { ?>
<?php echo $meta_keywords; ?><br />
<?php echo $meta_description; ?><br />
<?php } ?>
2 вариант: <?php if ($descriptions) { ?>
<?php foreach ($descriptions as $meta_keywords) { ?>
<?php echo $meta_keywords['meta_keywords']; ?><br />
<?php } ?>
<?php foreach ($descriptions as $meta_description) { ?>
<?php echo $meta_description['meta_description']; ?><br />
<?php } ?>
<?php } ?>
Поясняю, что эти поля meta_keywords meta_description встроила в самом продукте, они не для поисковика - там есть свои поисковые фразы и описания, поставленные без участия информации этих полей.
При 2-м варианте файла tpl выводится в полях то, что нужно - но с добавлением Undefined index meta_keywords Undefined index $meta_description (сточка такая-то) в файле продукта tpl. То есть из базы эти фразы вытянуты, но чего-то не хватает - то ли файл нужно специальный где-то создавать, то ли в каком-то файле записи не хватает либо она не верна.
При 1-м варианте - выводит все корректно, но производителя в обоих полях.