Jump to content
  • разработка интернет магазинов на opencart
  • доработка интернет магазинов на opencart

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


FreeDemon
 Share

Recommended Posts

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

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

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

Link to comment
Share on other sites


  • 2 weeks later...

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

Link to comment
Share on other sites


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

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

Мне понадобилось добавить в описание продуки выпадаюещёе меню СТРАНЫ, благо всё, что нужно, уже есть в админке. Делала по аналогии с полем производителя (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>';

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

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

Link to comment
Share on other sites


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

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

Link to comment
Share on other sites


  • 4 weeks later...

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

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

Link to comment
Share on other sites


  • 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>

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

Link to comment
Share on other sites


  • 3 months later...

Народ как попотому чтороли

Notice: Undefined variable: price_for in /home/semenafa/public_html/catalog/view/theme/default/template/product/product.tpl on line 39

в строке ггде должна выводиться цифра?

Link to comment
Share on other sites


  • 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
Link to comment
Share on other sites


  • 3 weeks later...

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

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

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

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

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

UqDTckqY.jpg

4o7qRD8a.jpg

Link to comment
Share on other sites


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

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

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

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

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

Link to comment
Share on other sites


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

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

Link to comment
Share on other sites


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

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

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

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

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

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

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

Link to comment
Share on other sites


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

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

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

https://opencart-forum.ru/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/
Link to comment
Share on other sites

  • 1 month later...

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

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

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

Link to comment
Share on other sites


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

Link to comment
Share on other sites


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

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

Link to comment
Share on other sites


  • 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:

Link to comment
Share on other sites


  • 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

 

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

Link to comment
Share on other sites


  • 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 селеки. 

 

 

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

Link to comment
Share on other sites


Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.