Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Recommended Posts

Дополнительные поля к описанию продукта? Платные модули? Не обязательно,
Вашему вниманию способ, протестированный на магазине под управлением OpenCart версии 1.5.4.1.
P.S. Не забываем про backup оригинальных файлов :-)

Задача:
Создание дополнительного текстового поля к описанию товара. В моем случае это будет поле "Стоимость за". Например:
"Стоимость за: 1 килограмм" или "Стоимость за: 1 метр квадратный".

Шаг 1. База данных. Создание столбца таблицы "product"
Административная панель хостера --> управление базами данных --> выбор базы --> таблица "product" --> SQL запрос:

ALTER TABLE `product` ADD `sellunit` VARCHAR( 32 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL AFTER `shipping`
ИЛИ выбор базы --> таблица "product" --> "Структура" --> "Добавить столбец" (под таблицей).
В моем случае новосозданный столбец под названием 'sellunit' следует сразу после столбца 'shipping' и имеет символьный тип данных varchar с ограничением длины в 32 символа.

Шаг 2. Административная часть
/admin/controller/catalog/product.php
Пример необходимого кода будет приводиться в окружении неизмененного кода (для удобства навигации по файлу), выделяясь отступами.
Строка 563
$this->data['entry_quantity'] = $this->language->get('entry_quantity');
$this->data['entry_stock_status'] = $this->language->get('entry_stock_status');

$this->data['entry_sellunit'] = $this->language->get('entry_sellunit');

$this->data['entry_price'] = $this->language->get('entry_price');
$this->data['entry_tax_class'] = $this->language->get('entry_tax_class');
Строка 849
if (isset($this->request->post['shipping'])) {
$this->data['shipping'] = $this->request->post['shipping'];
} elseif (!empty($product_info)) {
$this->data['shipping'] = $product_info['shipping'];
} else {
$this->data['shipping'] = 1;
}

if (isset($this->request->post['sellunit'])) {
$this->data['sellunit'] = $this->request->post['sellunit'];
} elseif (!empty($product_info)) {
$this->data['sellunit'] = $product_info['sellunit'];
} else {
$this->data['sellunit'] = '';
}

if (isset($this->request->post['price'])) {
$this->data['price'] = $this->request->post['price'];
} elseif (!empty($product_info)) {
$this->data['price'] = $product_info['price'];
} else {
$this->data['price'] = '';

/admin/model/catalog/product.php
В данном файле запросы к базе данных представлены в виде сплошной строки. Вынос каждого запроса в новую строку в представленном ниже коде сделан для наочности; менять структуру вовсе необязательно.
Строка 4
manufacturer_id = '" . (int)$data['manufacturer_id'] . "',
shipping = '" . (int)$data['shipping'] . "',

sellunit = '" . $this->db->escape($data['sellunit']) . "',

price = '" . (float)$data['price'] . "',
points = '" . (int)$data['points'] . "',
Строка 120
manufacturer_id = '" . (int)$data['manufacturer_id'] . "',
shipping = '" . (int)$data['shipping'] . "',

sellunit = '" . $this->db->escape($data['sellunit']) . "',

price = '" . (float)$data['price'] . "',
points = '" . (int)$data['points'] . "',

/admin/language/russian/catalog/product.php
Внести аналогичные изменения во все использующиеся языковые файлы административной панели, например /admin/language/ukrainian/catalog/product.php
Строка 48
$_['entry_minimum'] = 'Минимальное количество:<br/><span class="help">Указание минимально количества в заказе</span>';
$_['entry_stock_status'] = 'Остутствие на складе:<br /><span class="help">Статус, показываемый, когда товара нет на складе</span>';

$_['entry_sellunit'] = 'Стоимость за:';

$_['entry_price'] = 'Цена:';
$_['entry_tax_class'] = 'Налог:';

/admin/view/template/catalog/product_form.tpl
Строка 100
<tr>
<td><?php echo $entry_location; ?></td>
<td><input type="text" name="location" value="<?php echo $location; ?>" /></td>
</tr>

<tr>
<td><?php echo $entry_sellunit; ?></td>
<td><input type="text" name="sellunit" value="<?php echo $sellunit; ?>" /></td>
</tr>

<tr>
<td><?php echo $entry_price; ?></td>
<td><input type="text" name="price" value="<?php echo $price; ?>" /></td>
</tr>

Шаг 3. Клиентская часть
/catalog/controller/product/product.php
Строка 150
$this->data['text_discount'] = $this->language->get('text_discount');
$this->data['text_stock'] = $this->language->get('text_stock');

$this->data['text_sellunit'] = $this->language->get('text_sellunit');

$this->data['text_price'] = $this->language->get('text_price');
$this->data['text_tax'] = $this->language->get('text_tax');
Строка 190
$this->data['reward'] = $product_info['reward'];
$this->data['points'] = $product_info['points'];

$this->data['sellunit'] = $product_info['sellunit'];

if ($product_info['quantity'] <= 0) {
$this->data['stock'] = $product_info['stock_status'];
} elseif ($this->config->get('config_stock_display')) {
$this->data['stock'] = $product_info['quantity'];
} else {
$this->data['stock'] = $this->language->get('text_instock');
}

/catalog/model/catalog/product.php
Строка 39
'manufacturer_id' => $query->row['manufacturer_id'],
'manufacturer' => $query->row['manufacturer'],

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

'price' => ($query->row['discount'] ? $query->row['discount'] : $query->row['price']),
'special' => $query->row['special'],

/catalog/language/russian/product/product.php
Внести аналогичные изменения во все языковые файлы задействованных языков, например /catalog/language/ukrainian/product/product.php
Строка 11
$_['text_stock'] = 'Наличие:';
$_['text_instock'] = 'Есть в наличии';

$_['text_sellunit'] = 'Стоимость за:';

$_['text_price'] = 'Цена:';
$_['text_tax'] = 'Без НДС:';

/catalog/view/theme/%yourtheme%/template/product/product.tpl
Строка 34
<div class="description">
<?php if ($manufacturer) { ?>
<span><?php echo $text_manufacturer; ?></span> <a href="<?php echo $manufacturers; ?>"><?php echo $manufacturer; ?></a><br />
<?php } ?>
<span><?php echo $text_model; ?></span> <?php echo $model; ?><br />
<?php if ($reward) { ?>
<span><?php echo $text_reward; ?></span> <?php echo $reward; ?><br />
<?php } ?>
<span><?php echo $text_stock; ?></span> <?php echo $stock; ?>

<br />
<span><?php echo $text_sellunit; ?></span> <?php echo $sellunit; ?></div>

<?php if ($price) { ?>
<div class="price"><?php echo $text_price; ?>
<?php if (!$special) { ?>
<?php echo $price; ?>
<?php } else { ?>
<span class="price-old"><?php echo $price; ?></span> <span class="price-new"><?php echo $special; ?></span>
<?php } ?>

На этом всё. Good luck!
  • +1 7
Надіслати
Поділитися на інших сайтах


Дополнительные поля к описанию продукта...

ура! - то что надо, работает! :eek:

...только вот хочу вывести это поле не только в продукте... ...и рядом с ценой.

Надіслати
Поділитися на інших сайтах


А что мешает создать атрибут "Стоимость за: 1 килограмм"? И выводить его там где захочется потом.

Чем ваш способ лучше?

Пока вижу один явный минус - вы вмешиваетесь в структуру БД.

Надіслати
Поділитися на інших сайтах

Спасибо - попробую ...а то я тут кругом пишу сделайте мне модуль! ))

Зачем? Не могу понять почему это нельзя реализовать с помощью атрибутов?

Ведь это тоже дополнительные текстовые (и не только) поля.

Покажите на примере, где это нужно, пожалуйста. Интересно.

ссылочку на интернет-магазин, пожалуйста, там где это нужно и работает.

Надіслати
Поділитися на інших сайтах

Зачем? Не могу понять почему это нельзя реализовать с помощью атрибутов? Ведь это тоже дополнительные текстовые (и не только) поля. Покажите на примере, где это нужно, пожалуйста. Интересно. ссылочку на интернет-магазин, пожалуйста, там где это нужно и работает.

ну например можно сделать дополнительно int-поле "цена за упаковку", которое потом выводить рядом с основной ценой и поковырять валютный модуль чтобы он и это поле пересчитывал....

Надіслати
Поділитися на інших сайтах

ну вот все получилось, СПАСИБО, теперь в админке можно вводить цену за шт. и цену за упк. и они выводятся в карточке товара и пересчитываются в зависимости от выбранной валюты, правда ocstore 1.5.3.1 не много отличается, но не сильно :)

Надіслати
Поділитися на інших сайтах

ну например можно сделать дополнительно int-поле "цена за упаковку", которое потом выводить рядом с основной ценой

Так я и сейчас это могу делать, создав атрибут под названием "цена за упаковку", и вывести могу его рядом с ценой в любом нужном мне месте, точно также я вывожу сейчас "размеры" и пр.

Так в чем же удобство?

Фактически, автор дополнения создал дубликат "атрибутов". Так делали в старых версиях, когда не было атрибутов. Сейчас же если уметь пользоваться атрибутами, то в этом дополнении не вижу для себя полезности. Тем более, что для атрибутов и всяких опций есть отличные фильтры, которые незаменимы в ряде магазинов (например, компьютерных или автомобильных комплектующих ), а в данном случае мы теряем такую возможность.

Надіслати
Поділитися на інших сайтах

как бы теперь приучить модуль экспорта выгружать и этот параметр продукта?

не работает?

сделали бы с использованием атрибутов и такой вопрос не стоял бы.

Wacoola, скажите пожалуйста, а для чего вы используете данную возможность (добавление полей)?

Никак в толк не возьму чего же вам не хватало в базовой версии 1.5.4.1? Что именно вы не могли реализовать?

Может быть я просто не вижу какого то особого удобства данного метода? Если оно есть, то тогда я тоже возьму на заметку данную возможность.

  • +1 1
Надіслати
Поділитися на інших сайтах

не работает?

сделали бы с использованием атрибутов и такой вопрос не стоял бы.

Wacoola, скажите пожалуйста, а для чего вы используете данную возможность (добавление полей)?

Никак в толк не возьму чего же вам не хватало в базовой версии 1.5.4.1? Что именно вы не могли реализовать?

Может быть я просто не вижу какого то особого удобства данного метода? Если оно есть, то тогда я тоже возьму на заметку данную возможность.

Всё дело в том, что у меня в магазине товар, для которого иногда важно указать за какую единицу указана цена, например труба идет в бухтах, но при этом принято указывать цену за метр погонный! - и метод указанный Nazgulov мне показался подходящим. Хотя я и не спорю - если бы была возможность указывать ед. измерения для каждого товара изначально (в сборке) по примеру sku и т п - это было бы просто шикарно!!!

post-17724-0-05877400-1356004704_thumb.png

Надіслати
Поділитися на інших сайтах


Wacoola, если я правильно понял, то вы для определенной категории просто добавили надпись "за 1 метр погонный" под ценой?

Но для этого вообще необязательно вносить хоть какую то информацию в базу данных. НЕ нужны ни атрибуты, ни тем более дополнительные поля, которые еще нужно заполнять для каждого товара.

Я бы просто сделал индивидуальный дизайн для определенных категорий товаров и надпись "за 1 метр погонный" выводил бы в шаблоне.

Но метод с дополнительным полем кому то может показаться более удобным. Хотя одно неудобство налицо: надо для каждого товара в дополнительном поле вносить запись "за 1 метр погонный". Или вы эту проблему обошли и заполняете это поле сразу для целой группы товаров? Если так, то тогда это другое дело.

В любом случае полезно, что есть несколько способов получить один и тот же результат.

Надіслати
Поділитися на інших сайтах

Wacoola, если я правильно понял, то вы для определенной категории просто добавили надпись "за 1 метр погонный" под ценой?

Но для этого вообще необязательно вносить хоть какую то информацию в базу данных. НЕ нужны ни атрибуты, ни тем более дополнительные поля, которые еще нужно заполнять для каждого товара.

Я бы просто сделал индивидуальный дизайн для определенных категорий товаров и надпись "за 1 метр погонный" выводил бы в шаблоне.

Но метод с дополнительным полем кому то может показаться более удобным. Хотя одно неудобство налицо: надо для каждого товара в дополнительном поле вносить запись "за 1 метр погонный". Или вы эту проблему обошли и заполняете это поле сразу для целой группы товаров? Если так, то тогда это другое дело.

В любом случае полезно, что есть несколько способов получить один и тот же результат.

а к сожалению от этого ни куда не деться - например, тот же артикул тем же способом для каждого товара нужно заполнять

а как это сделать при помощи атрибутов я если честно вообще не понимаю

Надіслати
Поділитися на інших сайтах


а как это сделать при помощи атрибутов я если честно вообще не понимаю

Дело в том, что при желании нужный (конкретный, а не все) атрибут можно выводить в любом нужном вам месте, например, под ценой товара.

Обзовите этот атрибут "доп. информация" и присвойте ему значение "за 1 метр погонный", и выводите только значение этого атрибута прямо под ценой.

Разумеется, что шаблон надо поправить.

Ну раз уж есть готовый модуль и ничего править самому не надо - то это не ваш вариант.

а к сожалению от этого ни куда не деться - например, тот же артикул тем же способом для каждого товара нужно заполнять

В вашем случае в БД можно прописать значение по умолчанию (= "за 1 метр погонный") для дополнительного поля. Тогда для каждого товара определенной группы/категории это поле будет уже заполнено автоматически.

Надіслати
Поділитися на інших сайтах

В вашем случае в БД можно прописать значение по умолчанию (= "за 1 метр погонный") для дополнительного поля. Тогда для каждого товара определенной группы/категории это поле будет уже заполнено автоматически.

у меня кроме группы товаров "трубы" будут и другие...

и вариантов не мало.... это "шт." "кг" "литр" "комплект" и т п

Надіслати
Поділитися на інших сайтах


у меня кроме группы товаров "трубы" будут и другие...

и вариантов не мало.... это "шт." "кг" "литр" "комплект" и т п

Эту проблему можно обойти. Для каждой категории можно сделать свое значение по умолчанию. Ведь для категории "трубы металлопластиковые", у вас везде значение одно "за 1 метр погонный". Верно? Какой смысл тогда прописывать его каждому товару данной категории? ТОлько пустое раздувание БД. Пропишите это значение для всей категории сразу.

Или я что то не уловил?

Надіслати
Поділитися на інших сайтах

Эту проблему можно обойти. Для каждой категории можно сделать свое значение по умолчанию. Ведь для категории "трубы металлопластиковые", у вас везде значение одно "за 1 метр погонный". Верно? Какой смысл тогда прописывать его каждому товару данной категории? ТОлько пустое раздувание БД. Пропишите это значение для всей категории сразу.

Или я что то не уловил?

...нет, это я что-то не уловил :-D ...я ведь, не программист, и понятия не имею как это сделать!

...а на данный момент у меня:

<?php echo $text_sellunit; ?></span> <?php echo $sellunit; ?>

где   $text_sellunit  = "за 1"
а       $sellunit - действительно у каждого товара своё (хоть и в 80 % случаев одно и тоже)
...в скриншоте это "метр погонный"
в итоге имеем строчку вида "за 1 метр погонный"

post-17724-0-05877400-1356004704_thumb.png

Надіслати
Поділитися на інших сайтах


Wacoola, если есть желание, то могу сделать модуль, который упростит вашу жизнь. Т. е. если для конкретной категории у вас везде должно быть написано "за 1 метр погонный", то достаточно это написать один раз. И для каждой категории, разумеется, можно делать свою надпись. Более того, для нужных товаров эту надпись можно менять "по-товарно". Плюс нормальный экспорт/импорт как 2-й шаг если будет интерес.

  • +1 1
Надіслати
Поділитися на інших сайтах

Wacoola, если есть желание, то могу сделать модуль, который упростит вашу жизнь. Т. е. если для конкретной категории у вас везде должно быть написано "за 1 метр погонный", то достаточно это написать один раз. И для каждой категории, разумеется, можно делать свою надпись. Более того, для нужных товаров эту надпись можно менять "по-товарно". Плюс нормальный экспорт/импорт как 2-й шаг если будет интерес.

попробовать можно ...но есть ньанс - ед изм в дальнейшем возможно нужно будет прописывать и в других местах... - при оформлении товара например

Надіслати
Поділитися на інших сайтах


- при оформлении товара например

что вы под этим подразумеваете?

В корзине, например? или где?

Можете в личку написать если есть практический интерес.

я ведь, не программист

просто любопытно, а кто же?

Надіслати
Поділитися на інших сайтах

Так я и сейчас это могу делать, создав атрибут под названием "цена за упаковку", и вывести могу его рядом с ценой в любом нужном мне месте, точно также я вывожу сейчас "размеры" и пр. ......

а как на атрибут установить скидку или акцию и переводить между валютами?

Надіслати
Поділитися на інших сайтах

а как на атрибут установить скидку или акцию и переводить между валютами?

Вы это про что?

Wacoola дополнительное поле использует просто для вывода надписи "за 1 погонный метр" и аналогичных. Я давал ответ на конкретную задачу Wacoola. И для решения этой задачи (мною) не нужны доп. поля. И, более того, сохранилась бы совместимость с модулем экспорт/импорт. И кода потребовалось бы править намного меньше, но это уже мелочи.

Вы же рассуждаете как то абстрактно без конкретной задачи.

Если опишите конкретную задачу, которую нельзя решить доступными способами и которая полностью решается данным методом, то тогда это будет конструктивный разговор.

Надіслати
Поділитися на інших сайтах

В корзине, например? или где?

Да и в корзине и в других модулях.... например, я планирую работу с юр. лицами, интернет-магазин для заявок на поставку того или иного материала (товара)

для чего нужен модуль оплаты "Выставить счёт"

То как это должно выглядеть есть в скриншотах

post-17724-0-64254600-1356090828_thumb.png

post-17724-0-57005700-1356090829_thumb.png

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.