Я работаю над созданием расширения для моей установки opencart. В настоящее время я использую OpenCart V1.5.5.1. Ниже вы найдете код и процедуру, которой я следовал, чтобы добраться до этой точки. Надеюсь, кто-нибудь может помочь мне найти то, что мне еще нужно, чтобы сделать эту часть проекта.
Первым делом я добавил два столбца в таблицу продуктов в моей базе данных opencart. Эти столбцы следующие:
goal_activate tinyint (1) (Поиск возможных значений 0 или 1)
sales_goal INT (любое целое число)
Я также использовал следующий код, чтобы добавить необходимый текст и поля выбора для панели администратора для отображения элементов управления. Идея здесь состоит в том, чтобы иметь поле выбора для каждого продукта, которое позволит нашим сотрудникам включить цель продаж (goal_activate) и установить значение цели (sales_goal).
<file name="admin/controller/catalog/product.php">
<operation>
<search position="after"><![CDATA[$this->data['entry_quantity'] = $this->language->get('entry_quantity');]]></search>
<add><![CDATA[
$this->data['entry_goal_activate'] = $this->language->get('entry_goal_activate');
$this->data['entry_sales_goal'] = $this->language->get('entry_sales_goal');
]]></add>
</operation>
</file>
<file name="admin/language/english/catalog/product.php">
<operation>
<search position="after"><![CDATA[$_['entry_quantity'] = 'Quantity:';]]></search>
<add><![CDATA[
$_['entry_goal_activate'] = 'Activate Sales Goal<br/><span class="help">Activate the sales goal thermometer for this product.</span>';
$_['entry_sales_goal'] = 'Set sales goal<br/><span class="help">Sales goal is set in total units sold.</span>';
]]></add>
</operation>
</file>
<file name="admin/view/template/catalog/product_form.tpl">
<operation>
<search position="before"><![CDATA[<td><?php echo $entry_minimum; ?></td>]]></search>
<add><![CDATA[
<td><?php echo $entry_goal_activate; ?></td>
<td><select name="goal_activate">
<?php if ($goal_activate) { ?>
<option value="1" selected="selected"><?php echo $text_yes; ?></option>
<option value="0"><?php echo $text_no; ?></option>
<?php } else { ?>
<option value="1"><?php echo $text_yes; ?></option>
<option value="0" selected="selected"><?php echo $text_no; ?></option>
<?php } ?>
</select></td>
</tr>
<tr>
<td><?php echo $entry_sales_goal; ?></td>
<td><input type="text" name="sales_goal" value="<?php echo $sales_goal; ?>" size="2" /></td>
</tr>
<tr>
]]></add>
</operation>
</file>
Теперь все выглядит отлично в панели администратора, и все столбцы моей базы данных имеют надлежащие типы данных и значения по умолчанию. Все, что мне не хватает, — это код, который фактически изменит значения моей базы данных на основе пользовательского ввода с созданными элементами управления. Я считаю, что мне не хватает некоторых дополнений к файлам контроллера для admin / controller / catalog / product.php, я просто не уверен, что мне нужно делать. Любая помощь будет принята с благодарностью. Я прошу прощения, если что-то в моем вопросе не для формирования или отсутствия информации, это мой первый пост здесь.
Обработка базы данных выполняется model
слой инфраструктуры OpenCart MVC-L. Таким образом, вы должны также сделать некоторые изменения:
<file name="admin/model/catalog/product.php">
<operation>
<search position="before"><![CDATA[
$this->db->query("UPDATE " . DB_PREFIX . "product SET image = '" . $this->db->escape(html_entity_decode($data['image'], ENT_QUOTES, 'UTF-8')) . "' WHERE product_id = '" . (int)$product_id . "'");
]]></search>
<add><![CDATA[
$this->db->query("UPDATE " . DB_PREFIX . "product SET your_field_1 = '" . $this->db->escape($data['your_field_1']) . "', your_field_2 = '" . $this->db->escape($data['your_field_2']) . "' WHERE product_id = '" . (int)$product_id . "'");
]]></add>
</operation>
</file>
В дополнение к ответу, представленному Тибором Б., мне пришлось включить следующий код:
<file name="admin/controller/catalog/product.php">
<operation>
<search position="before"><![CDATA[if (isset($this->request->post['minimum'])) {]]></search>
<add><![CDATA[
if (isset($this->request->post['goal_activate'])) {
$this->data['goal_activate'] = $this->request->post['goal_activate'];
} else if (!empty($product_info)) {
$this->data['goal_activate'] = $product_info['goal_activate'];
} else {
$this->data['goal_activate'] = 0;
}
]]></add>
</operation>
<operation>
<search position="before"><![CDATA[if (isset($this->request->post['quantity'])) {]]></search>
<add><![CDATA[
if (isset($this->request->post['sales_goal'])) {
$this->data['sales_goal'] = $this->request->post['sales_goal'];
} elseif (!empty($product_info)) {
$this->data['sales_goal'] = $product_info['sales_goal'];
} else {
$this->data['sales_goal'] = 0;
}
]]></add>
</operation>