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

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


FreeDemon

Recommended Posts

на версии 1.5.1.3 отлично работает, не гоните парни.

Я как раз на эту версию и ставил!

Единственный косяк указанные строки кода немножко не совпадают, но они там есть, смотрите внимательнее!

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


  • 2 weeks later...

Люди, может видел кто решение по доп.полям - мне нужны выпадающие списком поля в админке с вариантами. Ну, или хотя бы, подскажите, в каких файлах добавлять/править, там уже по коду разберусь

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


Эх... делюсь.

ДОПОЛНИТЕЛЬНЫЕ ВЫПАДАЮЩИЕ ПОЛЯ ПРОДУКТА (СТРАНА)

Мне понадобилось добавить в описание продукта выпадающее меню СТРАНЫ, благо всё, что нужно, уже есть в админке. Делала по аналогии с полем производителя (manufacturer) и полем "страны" (country) в "Система>Локализация>Географические зоны", где форма создания геозоны (там как раз есть нужная выпадающая менюшка со списком стран).

1) Добавляем в БД в таблицу product столбец country_id:

ALTER TABLE `product` ADD `country_id` int(64) NOT NULL; 

В этом столбце будет прописываться/фиксироваться за продуктом номер страны, прописанный в таблице country.

2) в /admin/model/catalog/product.php ищем строку

this->db->query("INSERT INTO " . DB_PREFIX . "product SET

и в ней после

manufacturer_id = '" . (int)$data['manufacturer_id'] . "',

добавляем

country_id = '" . (int)$data['country_id'] . "',

далее в том же файле правим запрос обновления продукта - находим строку:

$this->db->query("UPDATE " . DB_PREFIX . "product SET

и снова в ней после

manufacturer_id = '" . (int)$data['manufacturer_id'] . "',

добавляем

country_id = '" . (int)$data['country_id'] . "',

в том же файле находим блок:

public function getTotalProductsByManufacturerId($manufacturer_id) {
	$query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "product WHERE manufacturer_id = '" . (int)$manufacturer_id . "'");

	return $query->row['total'];
}

и после него добавляем такой же, но ВЕЗДЕ в нём слово manufacturer заменяем на слово country (обратите внимание, что и здесь тоже: getTotalProductsByCountryId)

public function getTotalProductsByCountryId($country_id) {
	$query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "product WHERE country_id = '" . (int)$country_id . "'");

	return $query->row['total'];
}

3) в /admin/controller/catalog/product.php.

находим

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

и после неё добавляем:

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

далее в том же файле находим:

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

и после этой строки добавляем:

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

И самое главное в том же файле - ищем блок:

$this->load->model('catalog/manufacturer');

	$this->data['manufacturers'] = $this->model_catalog_manufacturer->getManufacturers();

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

и после него добавляем:

$this->load->model('localisation/country');

$this->data['countries'] = $this->model_localisation_country->getCountries();

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

обратите внимание, что в первой же строке идет ссылка на список стран в админке.

4) Теперь добавляем наше выпадающее поле в форму продукта в админке.

Открываем /admin/view/template/catalog/product_form.tpl

В нужном месте и вкладке добавляем строку в таблицу:

<!-- страна -->
	<tr>
		<td><?php echo $entry_country; ?></td>
		<td>
			<select name="country_id">
				<option value="0" selected="selected"><?php echo $text_none; ?></option>
				<?php foreach ($countries as $country) { ?>
					<?php if ($country['country_id'] == $country_id) { ?>
						<option value="<?php echo $country['country_id']; ?>" selected="selected"><?php echo $country['name']; ?></option>
					<?php } else { ?>
						<option value="<?php echo $country['country_id']; ?>"><?php echo $country['name']; ?></option>
					<?php } ?>
				<?php } ?>
			</select>
		</td>
	</tr>

5) Прописываем отображение заголовка поля

В файле /admin/language/russian/catalog/product.php указываем:

$_['entry_country']		= 'Страна производителя<span class="required">*</span>';

Первая строка выводит заголовок поля, вторая - комментарий к нему под полем выбора. Всё! Проверяем наличие поля в админке, в полях продукта и тестируем на заполнение и сохранение.

Как выводить поле покупателю, было написано в первом посте темы. За пост отдельное спасибо, по нему всё и искала))

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


Сделала на том, что уже было и надеюсь, мой глас вопиющего в сей форумной пустыне всё же не останется без ответа. Очень нужна схема, как создавать в админке раздел, аналогичный спискам стран, производителей и т.п. Ну или хотя бы не схему, как здесь, а просто список файлов, в которых копать.

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

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


  • 4 weeks later...

Вылезает ошибка "Notice: Undefined index: price_for in Z:hometest1.ruwwwadmincontrollercatalogproduct.php on line 832". Делал все по инструкции.

P.S. Ошибка эта вылезает только на локальном сервере, на внешнем все идеально работает.

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


  • 4 weeks later...

попробовал сделать xml файл и не работает, гуру подскажите что делать:

<modification>
	 <id><![CDATA[Atributes]]></id>
    <version><![CDATA[1.0]]></version>
    <vqmver><![CDATA[2.1.7]]></vqmver>
    <author><![CDATA[AAA]]></author>

 
  <file name="admin/language/russian/catalog/product.php">
			    <operation>
					    <search position="replace"><![CDATA[   
	 
					   
	  $_['entry_model']		    = 'Модель:';
					    ]]></search>
					   
					    <add><![CDATA[
					  
	   $_['entry_model']		    = 'Модель300:';
	   
	    ]]> </add>
    </operation>
			    <operation>
					    <search position="before"><![CDATA[   
	 
					   
	  $_['entry_sku']			  = 'Артикул (SKU, код производителя):';
					    ]]></search>
					   
					    <add><![CDATA[
					  
	    $_['entry_prodtext1']		    = 'ТЕКСТ1:';
	   
	    ]]> </add>
    </operation>
    </file>
	    <file name="admin/controller/catalog/product.php">
			    <operation>
					    <search position="after"><![CDATA[

    $this->data['entry_model'] = $this->language->get('entry_model');
	 ]]></search>
  <add><![CDATA[
    $this->data['entry_prodtext1'] = $this->language->get('entry_prodtext1');]]> </add>
    </operation>
<operation>
					    <search position="before"><![CDATA[
    if (isset($this->request->post['sku'])) {
	    $this->data['sku'] = $this->request->post['sku'];
	 } elseif (!empty($product_info)) {
   $this->data['sku'] = $product_info['sku'];
  } else {
	    $this->data['sku'] = '';
	 }
   ]]></search>
    <add><![CDATA[
    if (isset($this->request->post['prodtext1'])) {
	    $this->data['prodtext1'] = $this->request->post['prodtext1'];
	 } elseif (!empty($prodtext1)) {
   $this->data['prodtext1'] = $product_info['prodtext1'];
  } else {
	    $this->data['prodtext1'] = '';
	 }]]> </add>
    </operation>
    </file>
			 
<file name="admin/view/template/catalog/product_form.tpl">
			    <operation>
					    <search position="after" offset="5"><![CDATA[   
  <?php echo $entry_model; ?></td>
			
					    ]]></search>
					   
					    <add><![CDATA[   <tr>
			  <td><?php echo $entry_prodtext1; ?></td>
			  <td><input type="text" name="prodtext1" value="<?php echo $prodtext1; ?>" /></td>
		    </tr>]]> </add>
    </operation>

</file>
</modification>

Для начала код затрагивает админку, и не работает код, матерится почему-то :(

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


  • 3 months later...
  • 2 weeks later...

Здравствуйте. Может кто знает как вывести это самое новое поле на странице категории?

Cама себе отвечу в catalog\controller\product\category.php в блок $this->data['products'][] = array(

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

Ну и в \catalog\view\theme\default\template\product\category.tpl

  <table>
  <?php if ($product['price_for']>0) { ?>
  <tr>
		    <td><b><?php echo $text_price_for; ?></b></td>
		    <td><?php echo $product['price_for']; ?></td>
		  </tr>
		  <?php } ?>

</table>

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


  • 3 weeks later...

Всем добрый день! Помоги кто может решить проблему, пожалста!

Задача была добавить поле с выводом дополнительноый цены в товар, которая воспроизводилась бы просто как текст, без учета ее где либо в других схемах...

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

кто знает, в чем может быть проблема и как ее исправить?

вот скриншоты:

UqDTckqY.jpg

4o7qRD8a.jpg

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


Продолжение проблемы:

...и еще на тех товарах на которых кракозября сверху появилась строчка -

Notice: Undefined variable: priceroznica in Y:\home\localhost\www\myshop\catalog\controller\product\product.php on line 347Notice: Undefined variable: priceroznica in Y:\home\localhost\www\myshop\catalog\controller\product\product.php on line 347

а на товарах, соответственно, у которых поле добавилось нормлаьно, это строчки нет и вовсе....

Помогите, пожалста, кто может быть уже сталкивался с таким косяком...?

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


Удивительно....но вопрос разрешился...как то сам по себе, хоть и не правильно...

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

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


А как Добавляем новый столбец в таблицу?

Буду пытаться сам сделать.

Нужны 3 новых поля на странице товара.

Подскажите!?

Третий день пытаюсь но не как.

Напишите по подробней как сделать этот запрос.Кому не в лом конечно.

Пишите в личку.

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


Третий день пытаюсь но не как.

Напишите по подробней как сделать этот запрос.Кому не в лом конечно.

Пишите в личку.

https://opencartforum.com/topic/15639-%D0%B4%D0%BE%D0%B1%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5-%D0%BF%D0%BE%D0%BB%D0%B5%D0%B9-%D0%BA-%D0%BF%D1%80%D0%BE%D0%B4%D1%83%D0%BA%D1%82%D1%83-opencart-1541/
Надіслати
Поділитися на інших сайтах

  • 1 month later...

Удивительно....но вопрос разрешился...как то сам по себе, хоть и не правильно...

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

сохраняйте редактируемые файлы в utf8... и думаю "кракозябр" не будет.

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


Здравствуйте, спасибо за такое подробное описание,всё получилось,поля добавились,но в модуле Экспорт/Импорт они не отображаются! Подскажите,как решить проблему?! 

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


Здравствуйте, спасибо за такое подробное описание,всё получилось,поля добавились,но в модуле Экспорт/Импорт они не отображаются! Подскажите,как решить проблему?! 

Проблема решена. https://opencartforum.com/topic/3150-uluchshenie-modulia-importeksport/

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


  • 1 month later...

Удачно добавила поле на страницу продукта, категории, в админку, в базу и везде, где хотела.

Кроме корзины.

В корзине никак эти поля выводиться не хотят, подскажите, пожалуйста, как их победить?

 

Добавила в cart.tpl и cart.php переменные, но они не выводятся =(

 

Вот темплейт:

 

          <?php foreach ($products as $product) { ?>
          <tr>
            <td class="name"><a href="<?php echo $product['href']; ?>"><?php echo $product['name']; ?><br>
            <?php echo $double; ?><br>
      <?php echo $trio; ?></a>
 

Вот контроллер:

 

$this->data['products'][] = array(
           'key'      => $product['key'],
           'thumb'    => $image,
'name'     => $product['name'],
'double'  => $double,
'trio'    => $trio, 
           'model'    => $product['model'],
 

Пробовала прописать $product['double'], эффекта никакого.

 

Что я делаю не так?  :oops:

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


  • 1 month later...

Добавление дополнительных полей для продукта

Q: Как добавить дополнительное поле для продукта?

A: Вам нужно сделать ряд изменений:

0) Определится что хотим сделать smile.gif

К примеру, хотим добавить дополнительное поле "Цена за:" "шт.".

1) Приступим. Сначала придумаем алиас для нашего поля. К примеру price_for.

а) Определяемся в каком формате будут храниться данные. В нашем случае это будет varchar(64) (символьный).

б) Добавляем новый столбец в таблицу:

ALTER TABLE `имя_таблицы` ADD `price_for` varchar(64) NOT NULL; 

2) Далее говорим админ панеле OpenCart'а о существовании этого столбца. То есть, нам нужно:

а) "обновить" в модели продукта запросы к нашей БД.

Открываем /admin/model/catalog/product.php мы увидем такой вот запросик:

в строке 5 (или 6):
$this->db->query("INSERT INTO " . DB_PREFIX . "product 
SET model = '" . $this->db->escape($data['model']) . "', 
sku = '" . $this->db->escape($data['sku']) . "', 
location = '" . $this->db->escape($data['location']) . "', 
quantity = '" . (int)$data['quantity'] . "', 
stock_status_id = '" . (int)$data['stock_status_id'] . "', 
date_available = '" . $this->db->escape($data['date_available']) . "', 
manufacturer_id = '" . (int)$data['manufacturer_id'] . "', 
shipping = '" . (int)$data['shipping'] . "', 
price = '" . (float)$data['price'] . "', 
weight = '" . (float)$data['weight'] . "', 
weight_class_id = '" . (int)$data['weight_class_id'] . "', 
length = '" . (float)$data['length'] . "', 
width = '" . (float)$data['width'] . "', 
height = '" . (float)$data['height'] . "', 
measurement_class_id = '" . (int)$data['measurement_class_id'] . "', 
status = '" . (int)$data['status'] . "',
tax_class_id = '" . (int)$data['tax_class_id'] . "', 
date_added = NOW()");    
Это основной запрос из админки для добавления товара. Нам нужно добавить нашу переменную price_for. Так

$this->db->query("INSERT INTO " . DB_PREFIX . "product 
SET model = '" . $this->db->escape($data['model']) . "', 
sku = '" . $this->db->escape($data['sku']) . "', 
location = '" . $this->db->escape($data['location']) . "', 
quantity = '" . (int)$data['quantity'] . "', 
stock_status_id = '" . (int)$data['stock_status_id'] . "', 
date_available = '" . $this->db->escape($data['date_available']) . "', 
manufacturer_id = '" . (int)$data['manufacturer_id'] . "', 
shipping = '" . (int)$data['shipping'] . "', 
price = '" . (float)$data['price'] . "', 
price_for = '" . (float)$data['price_for'] . "', 
weight = '" . (float)$data['weight'] . "', 
weight_class_id = '" . (int)$data['weight_class_id'] . "', 
length = '" . (float)$data['length'] . "', 
width = '" . (float)$data['width'] . "', 
height = '" . (float)$data['height'] . "', 
measurement_class_id = '" . (int)$data['measurement_class_id'] . "', 
status = '" . (int)$data['status'] . "',
tax_class_id = '" . (int)$data['tax_class_id'] . "', 
date_added = NOW()");    

А также правим запрос обновления продукта (когда жмём изменить продукт). тотже файл.

строка 87(88, 89):
$this->db->query("UPDATE " . DB_PREFIX . "product 
SET model = '" . $this->db->escape($data['model']) . "', 
sku = '" . $this->db->escape($data['sku']) . "', 
location = '" . $this->db->escape($data['location']) . "', 
quantity = '" . (int)$data['quantity'] . "', 
stock_status_id = '" . (int)$data['stock_status_id'] . "', 
date_available = '" . $this->db->escape($data['date_available']) . "',
manufacturer_id = '" . (int)$data['manufacturer_id'] . "', 
shipping = '" . (int)$data['shipping'] . "', 
price = '" . (float)$data['price'] . "', 
price_for  = '" . (float)$data['price_for'] . "', 
weight = '" . (float)$data['weight'] . "', 
weight_class_id = '" . (int)$data['weight_class_id'] . "', 
length = '" . (float)$data['length'] . "', 
width = '" . (float)$data['width'] . "', 
height = '" . (float)$data['height'] . "', 
measurement_class_id = '" . (int)$data['measurement_class_id'] . "', 
status = '" . (int)$data['status'] . "', 
tax_class_id = '" . (int)$data['tax_class_id'] . "', 
date_modified = NOW() WHERE product_id = '" . (int)$product_id . "'");  

б) добавляем проверку заносимых данных в /admin/controller/catalog/product.php.

Сначала укажем о существовании текстовой переменной:

строка 440:
$this->data['entry_price'] = $this->language->get('entry_price');
Добавляем ниже своё

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

И самое главное, добавляем проверку вносимых данных. Смотрим:

строка 679
    	if (isset($this->request->post['price'])) {
      		$this->data['price'] = $this->request->post['price'];
    	} else if (isset($product_info)) {
			$this->data['price'] = $product_info['price'];
		} else {
      		$this->data['price'] = '';
    	}
Ниже добавляем своё

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

в) теперь нужно поправить шаблон в аминке. Что бы мы смогли увидеть поле куда забивать всё это дело. Открываем /admin/view/template/catalog/product_form.tpl

строка 141
          <tr>
            <td><?php echo $entry_price; ?></td>
            <td><input type="text" name="price" value="<?php echo $price; ?>" /></td>
          </tr>
Вставляем наше поле:

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

г) Ну и самое главное! в файле /admin/language/russian/catalog/product.php

Описываем какой текст мы будем видеть:

$_['entry_price_for']             = 'Цена за:';

Всё! С админкой покончено. Можно добавлять товар.

2) Теперь делаем самое главное - показуем покупателям єто поле =)

а) Говорим продуктам о существовании поля. Открываем файлик /catalog/controller/product/product.php

строка 122
$this->data['text_price'] = $this->language->get('text_price');
Ниже добавляем наше:

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

а также вносим переменную в масив:

строка 430
'price'   => $price,
добавляем

'price_for'   => $price_for,

Забыл.... нужно добавить

$this->data['price_for'] = $product_info['price_for'];
гдето в строке 320

б) Добавляем в шаблон. Открываем /catalog/view/theme/ваша_тема/template/product/product.tpl

строка  18
              <tr>
                <td>[b]<?php echo $text_price; ?>[/b]</td>
                <td><?php if (!$special) { ?>
                  <?php echo $price; ?>
                  <?php } else { ?>
                  <span style="text-decoration: line-through;"><?php echo $price; ?></span> [color= #F00;]<?php echo $special; ?>[/color]
                  <?php } ?></td>
              </tr>
ниже добавляем наше

              <tr>
                <td><b><?php echo $text_price_for; ?></b></td>
                <td><?php echo $price_for; ?></td>
              </tr>

в) Ну и напоследок добавляем в файл языка /catalog/language/russian/product/product.php

$_['text_price_for'] = 'Цена за:';

Вот и всё! Пользуйтесь.

PS. Вопрос к разработчикам. Как мне в шаблоне сделать такую проверку:

Если заходит пользователь группы А то делаем что то, а если заходит пользователь из группы Б то делаем чёто другое.

делал все по инструкции но все равно ошибка 

Notice: Undefined index: activ_button in /home/a7033477/public_html/vqmod/vqcache/vq2-catalog_controller_product_product.php on line 202

 

ни как не могу разобраться с вопросом

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


  • 1 month later...

Сделал себе дополнительное поле для товара -  "Есть молния - нет молнии", выводится картинками. 

 

Переделал ISBN в селект, получилось так- 

<select name="isbn" value="<?php echo $isbn; ?>">
<option value="image/molniya.png" >Есть</option>
<option value="image/sdfsDf.png" >Нет</option>
</select>

Выглядит так - 

1379176311-400.jpg

 

Но значение в селекте не сохраняется, в базу инфа записывается, но в админке селект сбрасывается и если я поставил  "молнии нет", при последующем редактировании товара  значение установится по умолчанию - первый option селекта. 

 

 

Как сделать, чтобы значение фиксировалось?

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


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

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

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

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

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

Вхід

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

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку

×
×
  • Створити...

Important Information

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