在 OpenCart 3.x 的产品描述页面中添加自定义字段 [英] Adding a custom field in products description page in OpenCart 3.x

查看:85
本文介绍了在 OpenCart 3.x 的产品描述页面中添加自定义字段的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想通过添加附加字段来自定义基于 OpenCart 的网站的产品描述页面,但我无法对描述描述页面的文件进行罚款.我已经检查了 catalog/view/theme/(mytemplate)/product/product.twig 文件,但这不是我的产品描述页面的文件.

解决方案

在产品描述 OpenCart 3.X(多语言)中添加新字段.

在右上角的管理仪表板上,单击齿轮图标.在弹出窗口中关闭缓存(两者)和刷新.这是必要的,以便可以看到您的编辑结果.

1. 首先,您需要在数据库中添加一个新字段.使用 phpMyAdmin,打开你的数据库,找到表 oc_product_description(oc_ - 是我的前缀,使用你的).

当您打开 oc_product_description 时,打开 SQL 选项卡并写入(不要忘记将 oc_ 更改为您的数据库前缀):

ALTER TABLE `oc_product_description` ADD `subtitle` VARCHAR(255) NOT NULL AFTER `name`;

这将添加一个新列副标题.

2.版本管理模型 admin/model/catalog/product.php

查找(≈12 行)

foreach ($data['product_description'] as $language_id => $value) {$this->db->query("INSERT INTO" .DB_PREFIX ."product_description SET product_id = '" .(int)$product_id ."', language_id = '" .(int)$language_id ."', name= '" . $this->db->e​​scape($value['name']) ."', description = '" . $this->db->e​​scape($value['description']) . "', tag = '" . $this->db->e​​scape($value['tag']) . "', meta_title = '" . $this->db->e​​scape($value['meta_title']) . "', meta_description = '" . $this->db->e​​scape($value['meta_description']) . "', meta_keyword = '" . $this->db->escape($value['meta_keyword']) . "'");}

替换为

foreach ($data['product_description'] as $language_id => $value) {$this->db->query("INSERT INTO" .DB_PREFIX ."product_description SET product_id = '" . (int)$product_id ."', language_id = '" . (int)$language_id ."', name= '" . $this->db->e​​scape($value['name']) ."',subtitle = '" . $this->db->e​​scape($value['subtitle']) . "', description = '" . $this->db->e​​scape($value['description']) . "', tag = '" . $this->db->e​​scape($value['tag']) . "', meta_title = '" . $this->db->e​​scape($value['meta_title']) . "', meta_description = '" . $this->db->escape($value['meta_description']) . "', meta_keyword = '" . $this->db->e​​scape($value['meta_keyword']) . "'");}

查找(≈146 行)

foreach ($data['product_description'] as $language_id => $value) {$this->db->query("INSERT INTO" .DB_PREFIX ."product_description SET product_id = '" .(int)$product_id ."', language_id = '" .(int)$language_id ."', name= '" . $this->db->e​​scape($value['name']) ."', description = '" . $this->db->e​​scape($value['description']) . "', tag = '" . $this->db->e​​scape($value['tag']) . "', meta_title = '" . $this->db->e​​scape($value['meta_title']) . "', meta_description = '" . $this->db->e​​scape($value['meta_description']) . "', meta_keyword = '" . $this->db->escape($value['meta_keyword']) . "'");}

替换为

foreach ($data['product_description'] as $language_id => $value) {$this->db->query("INSERT INTO" .DB_PREFIX ."product_description SET product_id = '" .(int)$product_id ."', language_id = '" .(int)$language_id ."', name= '" . $this->db->e​​scape($value['name']) ."',subtitle = '" . $this->db->e​​scape($value['subtitle']) . "', description = '" . $this->db->e​​scape($value['description']) . "', tag = '" . $this->db->e​​scape($value['tag']) . "', meta_title = '" . $this->db->e​​scape($value['meta_title']) . "', meta_description = '" . $this->db->escape($value['meta_description']) . "', meta_keyword = '" . $this->db->e​​scape($value['meta_keyword']) . "'");}

查找(≈432 行)

$product_description_data[$result['language_id']] = array('名称' =>$result['name'],

在下面添加

 'subtitle' =>$result['subtitle'],

3.版本管理模型 admin/controller/catalog/product.php

查找(≈500 行)

if (isset($this->error['name'])) {$data['error_name'] = $this->error['name'];} 别的 {$data['error_name'] = array();}

在下面添加

if (isset($this->error['subtitle'])) {$data['error_subtitle'] = $this->error['subtitle'];} 别的 {$data['error_subtitle'] = array();}

查找

if ((utf8_strlen($value['name']) <1) || (utf8_strlen($value['name']) > 255)) {$this->error['name'][$language_id] = $this->language->get('error_name');}

在下面添加

if (utf8_strlen($value['subtitle']) > 255) {$this->error['subtitle'][$language_id] = $this->language->get('error_subtitle');}

4.编辑管理语言 admin/language/en-gb(或您的管理语言)/catalog/product.php

在最后添加

$_['entry_subtitle'] = '产品副标题';$_['error_subtitle'] = '产品副标题必须少于 255 个字符!';

5.版本管理视图 admin/view/template/catalog/product_form.twig

查找(≈50 行)

<label class="col-sm-2 control-label" for="input-name{{ language.language_id }}">{{ entry_name }}</label><div class="col-sm-10"><input type="text" name="product_description[{{ language.language_id }}][name]" value="{{ product_description[language.language_id] ? product_description[language.language_id].name }}" placeholder="{{ entry_name }}" id="input-name{{ language.language_id }}" class="form-control"/>{% if error_name[language.language_id] %}<div class="text-danger">{{ error_name[language.language_id] }}</div>{% endif %} </div>

在下面添加

<label class="col-sm-2 control-label" for="input-name{{ language.language_id }}">{{ entry_subtitle }}</label><div class="col-sm-10"><input type="text" name="product_description[{{ language.language_id }}][subtitle]" value="{{ product_description[language.language_id] ? product_description[language.language_id].subtitle }}" placeholder="{{ entry_subtitle }}" id="input-subtitle{{ language.language_id }}" class="form-control"/>{% if error_subtitle[language.language_id] %}<div class="text-danger">{{ error_subtitle[language.language_id] }}</div>{% endif %} </div>

现在我们可以在编辑或添加产品时在管理面板中看到新字段.

最后,我们要编辑客户端.

6.版本客户模型 catalog/model/catalog/product.php

查找(≈10 行)

if ($query->num_rows) {返回数组('product_id' =>$query->row['product_id'],'名称' =>$query->row['name'],

在下面添加

'subtitle' =>$query->row['subtitle'],

7.版本客户控制器 catalog/controller/product/product.php

查找(≈228 行)

$data['heading_title'] = $product_info['name'];

在下面添加

$data['subtitle'] = $product_info['subtitle'];

8.编辑客户视图 catalog/view/theme/default(或您的主题)/template/product/product.twig

查找

{{heading_title }}

在下面添加

{{subtitle}}

恭喜!我们做到了!在所有这些操作之后,您必须清除 ocmod 缓存.转到管理,扩展 - 修改,右上角按钮刷新.然后返回管理仪表板,单击右上角的齿轮图标.在弹出窗口中打开缓存(两者)并刷新它.在此处详细了解缓存 OpenCart 3.X 缓存清理 https://stackoverflow.com/a/61524855/3187127

这适用于任何 OpenCart 3.X,但在一些较旧的 3.X 版本中,您必须通过清理文件系统中的存储来清除 twig 缓存.

I want to customize the product description page of my site which is based on OpenCart by adding an additional field, but i'm unable to fined the file that describes the description page. I have checked the catalog/view/theme/(mytemplate)/product/product.twig file but that's not the file for my product description page.

解决方案

Adding new field in product description OpenCart 3.X (multilingual).

On the Dashboard of Admin at the right top corner click on Gear icon. In the popup window turn the Cache OFF (both) and Refresh. This is necessary so that the results of your editing can be seen.

1. First of all, you need to add a new field in your database. Using phpMyAdmin, open your DB, find table oc_product_description (oc_ - is my prefix, use yours).

When you open oc_product_description, open SQL tab and write (don't forget to change oc_ to your DB prefix):

ALTER TABLE `oc_product_description` ADD `subtitle` VARCHAR(255) NOT NULL AFTER `name`;

This will add a new column subtitle.

2. Edition admin model admin/model/catalog/product.php

Find (≈12 line)

foreach ($data['product_description'] as $language_id => $value) {
  $this->db->query("INSERT INTO " . DB_PREFIX . "product_description SET product_id = '" . (int)$product_id . "', language_id = '" . (int)$language_id . "', name = '" . $this->db->escape($value['name']) . "', description = '" . $this->db->escape($value['description']) . "', tag = '" . $this->db->escape($value['tag']) . "', meta_title = '" . $this->db->escape($value['meta_title']) . "', meta_description = '" . $this->db->escape($value['meta_description']) . "', meta_keyword = '" . $this->db->escape($value['meta_keyword']) . "'");
}

Replace with

foreach ($data['product_description'] as $language_id => $value) {
  $this->db->query("INSERT INTO " . DB_PREFIX . "product_description SET product_id = '" . (int)$product_id . "', language_id = '" . (int)$language_id . "', name = '" . $this->db->escape($value['name']) . "', subtitle = '" . $this->db->escape($value['subtitle']) . "', description = '" . $this->db->escape($value['description']) . "', tag = '" . $this->db->escape($value['tag']) . "', meta_title = '" . $this->db->escape($value['meta_title']) . "', meta_description = '" . $this->db->escape($value['meta_description']) . "', meta_keyword = '" . $this->db->escape($value['meta_keyword']) . "'");
}

Find (≈146 line)

foreach ($data['product_description'] as $language_id => $value) {
  $this->db->query("INSERT INTO " . DB_PREFIX . "product_description SET product_id = '" . (int)$product_id . "', language_id = '" . (int)$language_id . "', name = '" . $this->db->escape($value['name']) . "', description = '" . $this->db->escape($value['description']) . "', tag = '" . $this->db->escape($value['tag']) . "', meta_title = '" . $this->db->escape($value['meta_title']) . "', meta_description = '" . $this->db->escape($value['meta_description']) . "', meta_keyword = '" . $this->db->escape($value['meta_keyword']) . "'");
}

Replace with

foreach ($data['product_description'] as $language_id => $value) {
  $this->db->query("INSERT INTO " . DB_PREFIX . "product_description SET product_id = '" . (int)$product_id . "', language_id = '" . (int)$language_id . "', name = '" . $this->db->escape($value['name']) . "', subtitle = '" . $this->db->escape($value['subtitle']) . "', description = '" . $this->db->escape($value['description']) . "', tag = '" . $this->db->escape($value['tag']) . "', meta_title = '" . $this->db->escape($value['meta_title']) . "', meta_description = '" . $this->db->escape($value['meta_description']) . "', meta_keyword = '" . $this->db->escape($value['meta_keyword']) . "'");
}

Find (≈432 line)

$product_description_data[$result['language_id']] = array(
  'name'             => $result['name'],

Add below

  'subtitle'         => $result['subtitle'],

3. Edition admin model admin/controller/catalog/product.php

Find (≈500 line)

if (isset($this->error['name'])) {
  $data['error_name'] = $this->error['name'];
} else {
  $data['error_name'] = array();
}

Add below

if (isset($this->error['subtitle'])) {
  $data['error_subtitle'] = $this->error['subtitle'];
} else {
  $data['error_subtitle'] = array();
}

Find

if ((utf8_strlen($value['name']) < 1) || (utf8_strlen($value['name']) > 255)) {
  $this->error['name'][$language_id] = $this->language->get('error_name');
}

Add below

if (utf8_strlen($value['subtitle']) > 255) {
  $this->error['subtitle'][$language_id] = $this->language->get('error_subtitle');
}

4. Editing admin language admin/language/en-gb(or your admin language)/catalog/product.php

Add at the end

$_['entry_subtitle']         = 'Product Subtitle';
$_['error_subtitle']         = 'Product Subtitle must less than 255 characters!';

5. Edition admin view admin/view/template/catalog/product_form.twig

Find (≈50 line)

<div class="form-group required">
  <label class="col-sm-2 control-label" for="input-name{{ language.language_id }}">{{ entry_name }}</label>
  <div class="col-sm-10">
    <input type="text" name="product_description[{{ language.language_id }}][name]" value="{{ product_description[language.language_id] ? product_description[language.language_id].name }}" placeholder="{{ entry_name }}" id="input-name{{ language.language_id }}" class="form-control"/>
    {% if error_name[language.language_id] %}
      <div class="text-danger">{{ error_name[language.language_id] }}</div>
    {% endif %} </div>
</div>

Add below

<div class="form-group">
  <label class="col-sm-2 control-label" for="input-name{{ language.language_id }}">{{ entry_subtitle }}</label>
  <div class="col-sm-10">
    <input type="text" name="product_description[{{ language.language_id }}][subtitle]" value="{{ product_description[language.language_id] ? product_description[language.language_id].subtitle }}" placeholder="{{ entry_subtitle }}" id="input-subtitle{{ language.language_id }}" class="form-control"/>
    {% if error_subtitle[language.language_id] %}
      <div class="text-danger">{{ error_subtitle[language.language_id] }}</div>
    {% endif %} </div>
</div>

Now we can see new field in Admin panel while edition or adding a product.

Finally, we are going to edit customer side.

6. Edition customer model catalog/model/catalog/product.php

Find (≈10 line)

if ($query->num_rows) {
  return array(
    'product_id'       => $query->row['product_id'],
    'name'             => $query->row['name'],

Add below

'subtitle'         => $query->row['subtitle'],

7. Edition customer controller catalog/controller/product/product.php

Find (≈228 line)

$data['heading_title'] = $product_info['name'];

Add below

$data['subtitle'] = $product_info['subtitle'];

8. Editing customer view catalog/view/theme/default(or your theme)/template/product/product.twig

Find

<h1>{{ heading_title }}</h1>

Add below

<h3>{{ subtitle }}</h3>

Congrats! We have done it! After all thous manipulations you have to clear ocmod cache. Go to Admin, Extensions - Modifications, right top corner button Refresh. Than go back to admin Dashboard, click on right top corner Gear icon. In the popup window turn the Cache ON (both) and Refresh it. More about cache OpenCart 3.X cache cleaning here https://stackoverflow.com/a/61524855/3187127

This is suitable for any OpenCart 3.X, but in in some older 3.X versions you will have to clear twig cache by cleaning storage in file system.

这篇关于在 OpenCart 3.x 的产品描述页面中添加自定义字段的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆