Jump to content

Recommended Posts

Здравствуйте, вопрос: Как сделать картинку для атрибута?

Наприер:

Есть атрибут возраст, надо его сделать картинкой, а значение текстом.

Знаю что у каждого атрибута есть свой id, может можно в карточке товара прописать( но я не знаю как) if значение атрибута такое, высветить картинку.

Share this post


Link to post
Share on other sites

модуль хороший, но делает наоборот: значение картинкой а название как было так и осталось, это не подойдет(

Share this post


Link to post
Share on other sites

Я для этого дорабатывал админку и контроллеры

магазина

 

1. Для атрибута создается создается доп. поле для изображений ( может создаваться в двух местах, в таблице  oc_attribute или oc_attribute_description (если для разных языков нужны разные картинки)

изменения в  модели, контроллере, шаблоне, языковых файлах - не совсем сложные

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

Share this post


Link to post
Share on other sites

модуль хороший, но делает наоборот: значение картинкой а название как было так и осталось, это не подойдет(

Это ищите? https://opencartforum.com/files/file/2163-%D1%81%D1%82%D0%B0%D1%82%D1%83%D1%81%D1%8B-%D1%82%D0%BE%D0%B2%D0%B0%D1%80%D0%B0-pro-%D0%B0%D0%B2%D1%82%D0%BE%D1%81%D1%82%D0%B0%D1%82%D1%83%D1%81%D1%8B-%D1%81%D1%82%D0%B8%D0%BA%D0%B5%D1%80%D1%8B/

Share this post


Link to post
Share on other sites

Я для этого дорабатывал админку и контроллеры

магазина

 

1. Для атрибута создается создается доп. поле для изображений ( может создаваться в двух местах, в таблице  oc_attribute или oc_attribute_description (если для разных языков нужны разные картинки)

изменения в  модели, контроллере, шаблоне, языковых файлах - не совсем сложные

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

Спасибо Chukcha, это то что я изначально хотел узнать :eek:

 

Спасибо Ingenerks, это то что я теперь хочу :-D

Share this post


Link to post
Share on other sites

Доброго времени суток, уважаемые форумчане. Собственно интересует та же задача. Пытаюсь справиться своими силами.

Исходные данные: движок ocstore 2.3.0.2.1, шаблон - дефолт

Что сделано

1. в таблицу oc_attribute добавлена графа icon

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

2. изменен файл admin/model/catalog/attribute.php следующим образом

2.1 в функцию addAttribute() добавлены строки

if (isset($data['icon'])) {
    $this->db->query("UPDATE " . DB_PREFIX . "attribute SET icon = '" . $this->db->escape($data['icon']) . "' WHERE attribute_id = '" . (int)$attribute_id . "'");
}

2.2 в функцию editAttribute() добавлены строки

if (isset($data['icon'])) {
   $this->db->query("UPDATE " . DB_PREFIX . "attribute SET icon = '" . $this->db->escape($data['icon']) . "' WHERE attribute_id = '" . (int)$attribute_id . "'");
}

3. в файл /admin/view/template/catalog/attribute_form.tpl добавлена конструкция

<div class="form-group">
  <label class="col-sm-2 control-label" for="input-sort-order"><?php echo $entry_icon; ?></label>
  <div class="col-sm-10">
    <a href="" id="thumb-image" data-toggle="image" class="img-thumbnail"><img src="<?php echo $thumb_icon; ?>" alt="" title="" data-placeholder="<?php echo $placeholder_icon; ?>" /></a><input type="hidden" name="icon" value="<?php echo $icon; ?>" id="input-image" />
  </div>
</div>

4. в файле /admin/controller/catalog/attribute.php в функцию getForm() добавлены строки

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

$this->load->model('tool/icon');

if (isset($this->request->post['icon']) && is_file(DIR_IMAGE . $this->request->post['icon'])) {
	$data['thumb_icon'] = $this->model_tool_icon->resize($this->request->post['icon'], 100, 100);
} elseif (!empty($attribute_info) && is_file(DIR_IMAGE . $attribute_info['icon'])) {
	$data['thumb_icon'] = $this->model_tool_icon->resize($attribute_info['icon'], 100, 100);
} else {
	$data['thumb_icon'] = $this->model_tool_icon->resize('no_image.png', 100, 100);
}

$data['placeholder_icon'] = $this->model_tool_icon->resize('no_image.png', 100, 100);

Эти мероприятия привели к тому, что в графу icon таблицы oc_attribute прописывается путь к изображению. Однако обратной связи нет. В карточке атрибута это изображение не отображается (попытка считать содержимое $thumb_icon приводит к "Notice: Undefined variable: thumb_icon in ...\admin\view\template\catalog\attribute_form.tpl on line 69" ).

Точно так же себя ведет попытка вывести $attribute['icon'] в карточку товара – Undefined index: icon.

Складывается впечатление, что в $attribute_info значение графы icon не попадает.

Подскажите, пожалуйста, в какую сторону копать дальше? И в каком месте данные переменные объявляются?

Подскажите, в какую сторону копать, и где мне их

Share this post


Link to post
Share on other sites

с первой частью разобрался. перенес код из п.4 своего предыдущего поста выше по функции getForm() - теперь картинка к атрибуту прикрепляется

теперь пытаюсь вывести картинки в карточку товара. в ...\catalog\view\theme\default\template\product\product.tpl это делается так:

<div class="tab-pane" id="tab-specification">
  <table class="table table-bordered">
    <?php foreach ($attribute_groups as $attribute_group) { ?>
    <thead>
      <tr>
        <td colspan="2"><strong><?php echo $attribute_group['name']; ?></strong></td>
      </tr>
    </thead>
    <tbody>
      <?php foreach ($attribute_group['attribute'] as $attribute) { ?>
      <tr>
        <td><?php echo $attribute['name']; ?></td>
        <td><?php echo $attribute['icon']; ?></td> <!-- добавлена строка -->
        <td><?php echo $attribute['text']; ?></td>
      </tr>
      <?php } ?>
    </tbody>
    <?php } ?>
  </table>
</div>

насколько я понимаю, обработкой шаблона ...\catalog\view\theme\default\template\product\product.tpl занимается ...\catalog\controller\product\product.php Меня интересует строка

$data['attribute_groups'] = $this->model_catalog_product->getProductAttributes($this->request->get['product_id']);

функция getProductAttributes в ...\catalog\model\catalog\product.php выглядит так

public function getProductAttributes($product_id) {
	$product_attribute_group_data = array();

	$product_attribute_group_query = $this->db->query("SELECT ag.attribute_group_id, agd.name FROM " . DB_PREFIX . "product_attribute pa LEFT JOIN " . DB_PREFIX . "attribute a ON (pa.attribute_id = a.attribute_id) LEFT JOIN " . DB_PREFIX . "attribute_group ag ON (a.attribute_group_id = ag.attribute_group_id) LEFT JOIN " . DB_PREFIX . "attribute_group_description agd ON (ag.attribute_group_id = agd.attribute_group_id) WHERE pa.product_id = '" . (int)$product_id . "' AND agd.language_id = '" . (int)$this->config->get('config_language_id') . "' GROUP BY ag.attribute_group_id ORDER BY ag.sort_order, agd.name");

	foreach ($product_attribute_group_query->rows as $product_attribute_group) {
		$product_attribute_data = array();

		$product_attribute_query = $this->db->query("SELECT a.attribute_id, ad.name, pa.text FROM " . DB_PREFIX . "product_attribute pa LEFT JOIN " . DB_PREFIX . "attribute a ON (pa.attribute_id = a.attribute_id) LEFT JOIN " . DB_PREFIX . "attribute_description ad ON (a.attribute_id = ad.attribute_id) WHERE pa.product_id = '" . (int)$product_id . "' AND a.attribute_group_id = '" . (int)$product_attribute_group['attribute_group_id'] . "' AND ad.language_id = '" . (int)$this->config->get('config_language_id') . "' AND pa.language_id = '" . (int)$this->config->get('config_language_id') . "' ORDER BY a.sort_order, ad.name");

		foreach ($product_attribute_query->rows as $product_attribute) {
			$product_attribute_data[] = array(
				'attribute_id' => $product_attribute['attribute_id'],
				'name'         => $product_attribute['name'],
				'icon'	       => $product_attribute['icon'], // добавлена строка
				'text'         => $product_attribute['text']
			);
		}

		$product_attribute_group_data[] = array(
			'attribute_group_id' => $product_attribute_group['attribute_group_id'],
			'name'               => $product_attribute_group['name'],
			'attribute'          => $product_attribute_data
		);
	}

	return $product_attribute_group_data;
}

в таком виде карточка товара приводит к ошибке Notice: Undefined index: icon in ...\catalog\model\catalog\product.php on line 324.

Не могу понять в чем причина, ведь в oc_attribute графа icon присутствует и должна выгружаться в $product_attribute_query

Share this post


Link to post
Share on other sites

разобрался.

в sql-запрос $product_attribute_query добавил a.icon и все заработало.

Всем спасибо за внимание.

Edited by OrganiZzZm

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×

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.