COVID2019 и это вот все. Друзья, вся эта история начинает плохо пахнет. Мойте руки, не ходите в люди. Отложите все плановые покупки и положите в носок заначку. Заприте ваших родителей, бабушек-дедушек на даче. Лучше перебдеть чем недобдеть. Берегите себя!

Как сделать вывод у товаров в наличии


Adems

Recommended Posts

Здравствуйте! Посоветуйте как реализовать вывод у товаров со статусом В наличии вот такого тега: <meta itemprop="availability" content="http://schema.org/InStock">

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

Ссылка на комментарий
Поделиться на других сайтах

10 часов назад, Fedka сказал:

Я у себя на сайтах вывожу после проверки


<?php if ($price) { ?>

Имеет вид, примерно:


<div itemprop="offers" itemscope itemtype="http://schema.org/Offer">
	<span itemprop="price" content="1000.00">1,000.00</span>
	<span itemprop="priceCurrency" content="UAH">ГРН.-</span>
	<link itemprop="availability" href="http://schema.org/InStock" />
</div>

 

Спасибо за ответ, да с этим всё понятно. Немного другой вопрос: как вывести это тег у товаров именно со статусом В наличии, лепить всем подряд <meta itemprop="availability" content="http://schema.org/InStock">  как то не правильно. Надо думать или модуль какой-то, или в контролере что то менять с выводом нового значения по id метки. Отдаётся эта метка с со своим id значит тег выводится не отдается значит не выводится.

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

Ссылка на комментарий
Поделиться на других сайтах

11 час назад, Adems сказал:

Спасибо за ответ, да с этим всё понятно. Немного другой вопрос: как вывести это тег у товаров именно со статусом В наличии, лепить всем подряд <meta itemprop="availability" content="http://schema.org/InStock">  как то не правильно. Надо думать или модуль какой-то, или в контролере что то менять с выводом нового значения по id метки. Отдаётся эта метка с со своим id значит тег выводится не отдается значит не выводится.

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

<link itemprop="availability" href="http://schema.org/<?php echo (($availability) ? 'InStock' : 'OutOfStock') ?>" />

Эту проверку вставить в product.tpl

 

А в контроллер product.php добавить где-то

$data['availability'] = ($product_info['quantity'] > 0) ? true : false;

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

Ссылка на комментарий
Поделиться на других сайтах

21 час назад, Fedka сказал:

<link itemprop="availability" href="http://schema.org/<?php echo (($availability) ? 'InStock' : 'OutOfStock') ?>" />

Эту проверку вставить в product.tpl

 

А в контроллер product.php добавить где-то


$data['availability'] = ($product_info['quantity'] > 0) ? true : false;

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

Отлично! Огромное спасибо!

Ссылка на комментарий
Поделиться на других сайтах

В 22.01.2017 at 22:16, Fedka сказал:

<link itemprop="availability" href="http://schema.org/<?php echo (($availability) ? 'InStock' : 'OutOfStock') ?>" />

Эту проверку вставить в product.tpl

 

А в контроллер product.php добавить где-то


$data['availability'] = ($product_info['quantity'] > 0) ? true : false;

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

Здравствуйте! Извиняюсь не подскажете такое же решение только для списка товаров в категории? Если можно.

Ссылка на комментарий
Поделиться на других сайтах

1 час назад, Adems сказал:

Здравствуйте! Извиняюсь не подскажете такое же решение только для списка товаров в категории? Если можно.

Аналогично как на странице товара, только это все делать внутри foreach ($results as $result) {

И вставлять в массив - $data['products']

Ссылка на комментарий
Поделиться на других сайтах

20 часов назад, Fedka сказал:

Аналогично как на странице товара, только это все делать внутри foreach ($results as $result) {

И вставлять в массив - $data['products']

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

Ссылка на комментарий
Поделиться на других сайтах

27 минут назад, Adems сказал:

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

Открываем файл catalog\controller\product\category.php

Ищем:

Скрытый текст



foreach ($results as $result) {
	if ($result['image']) {
		$image = $this->model_tool_image->resize($result['image'], $this->config->get('config_image_product_width'), $this->config->get('config_image_product_height'));
	} else {
		$image = $this->model_tool_image->resize('placeholder.png', $this->config->get('config_image_product_width'), $this->config->get('config_image_product_height'));
	}

	if (($this->config->get('config_customer_price') && $this->customer->isLogged()) || !$this->config->get('config_customer_price')) {
		$price = $this->currency->format($this->tax->calculate($result['price'], $result['tax_class_id'], $this->config->get('config_tax')));
	} else {
		$price = false;
	}

	if ((float)$result['special']) {
		$special = $this->currency->format($this->tax->calculate($result['special'], $result['tax_class_id'], $this->config->get('config_tax')));
	} else {
		$special = false;
	}

	if ($this->config->get('config_tax')) {
		$tax = $this->currency->format((float)$result['special'] ? $result['special'] : $result['price']);
	} else {
		$tax = false;
	}

	if ($this->config->get('config_review_status')) {
		$rating = (int)$result['rating'];
	} else {
		$rating = false;
	}

	$data['products'][] = array(
		'product_id'  => $result['product_id'],
		'thumb'       => $image,
		'name'        => $result['name'],
		'description' => utf8_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, $this->config->get('config_product_description_length')) . '..',
		'price'       => $price,
		'special'     => $special,
		'tax'         => $tax,
		'minimum'     => $result['minimum'] > 0 ? $result['minimum'] : 1,
		'rating'      => $result['rating'],
		'href'        => $this->url->link('product/product', 'path=' . $this->request->get['path'] . '&product_id=' . $result['product_id'] . $url)
	);
}


 

 у меня это 205 строчка в файле.

И заменяем его на:

Скрытый текст

foreach ($results as $result) {
	if ($result['image']) {
		$image = $this->model_tool_image->resize($result['image'], $this->config->get('config_image_product_width'), $this->config->get('config_image_product_height'));
	} else {
		$image = $this->model_tool_image->resize('placeholder.png', $this->config->get('config_image_product_width'), $this->config->get('config_image_product_height'));
	}

	if (($this->config->get('config_customer_price') && $this->customer->isLogged()) || !$this->config->get('config_customer_price')) {
		$price = $this->currency->format($this->tax->calculate($result['price'], $result['tax_class_id'], $this->config->get('config_tax')));
	} else {
		$price = false;
	}

	if ((float)$result['special']) {
		$special = $this->currency->format($this->tax->calculate($result['special'], $result['tax_class_id'], $this->config->get('config_tax')));
	} else {
		$special = false;
	}

	if ($this->config->get('config_tax')) {
		$tax = $this->currency->format((float)$result['special'] ? $result['special'] : $result['price']);
	} else {
		$tax = false;
	}

	if ($this->config->get('config_review_status')) {
		$rating = (int)$result['rating'];
	} else {
		$rating = false;
	}
	
	$availability = ($result['quantity'] > 0) ? true : false;
	
	$data['products'][] = array(
		'product_id'  => $result['product_id'],
		'thumb'       => $image,
		'name'        => $result['name'],
		'description' => utf8_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, $this->config->get('config_product_description_length')) . '..',
		'availability'=> $availability,
		'price'       => $price,
		'special'     => $special,
		'tax'         => $tax,
		'minimum'     => $result['minimum'] > 0 ? $result['minimum'] : 1,
		'rating'      => $result['rating'],
		'href'        => $this->url->link('product/product', 'path=' . $this->request->get['path'] . '&product_id=' . $result['product_id'] . $url)
	);
}

 

И в файле шаблона, Вы водим по аналогии с тем, как на странице товара выводилось...Переменная будет $product['availability']

 

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

Ссылка на комментарий
Поделиться на других сайтах

31 минуту назад, Fedka сказал:

 

  Показать содержимое

 



foreach ($results as $result) {
	if ($result['image']) {
		$image = $this->model_tool_image->resize($result['image'], $this->config->get('config_image_product_width'), $this->config->get('config_image_product_height'));
	} else {
		$image = $this->model_tool_image->resize('placeholder.png', $this->config->get('config_image_product_width'), $this->config->get('config_image_product_height'));
	}

	if (($this->config->get('config_customer_price') && $this->customer->isLogged()) || !$this->config->get('config_customer_price')) {
		$price = $this->currency->format($this->tax->calculate($result['price'], $result['tax_class_id'], $this->config->get('config_tax')));
	} else {
		$price = false;
	}

	if ((float)$result['special']) {
		$special = $this->currency->format($this->tax->calculate($result['special'], $result['tax_class_id'], $this->config->get('config_tax')));
	} else {
		$special = false;
	}

	if ($this->config->get('config_tax')) {
		$tax = $this->currency->format((float)$result['special'] ? $result['special'] : $result['price']);
	} else {
		$tax = false;
	}

	if ($this->config->get('config_review_status')) {
		$rating = (int)$result['rating'];
	} else {
		$rating = false;
	}

	$data['products'][] = array(
		'product_id'  => $result['product_id'],
		'thumb'       => $image,
		'name'        => $result['name'],
		'description' => utf8_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, $this->config->get('config_product_description_length')) . '..',
		'price'       => $price,
		'special'     => $special,
		'tax'         => $tax,
		'minimum'     => $result['minimum'] > 0 ? $result['minimum'] : 1,
		'rating'      => $result['rating'],
		'href'        => $this->url->link('product/product', 'path=' . $this->request->get['path'] . '&product_id=' . $result['product_id'] . $url)
	);
}

 

 

 

  Показать содержимое


foreach ($results as $result) {
	if ($result['image']) {
		$image = $this->model_tool_image->resize($result['image'], $this->config->get('config_image_product_width'), $this->config->get('config_image_product_height'));
	} else {
		$image = $this->model_tool_image->resize('placeholder.png', $this->config->get('config_image_product_width'), $this->config->get('config_image_product_height'));
	}

	if (($this->config->get('config_customer_price') && $this->customer->isLogged()) || !$this->config->get('config_customer_price')) {
		$price = $this->currency->format($this->tax->calculate($result['price'], $result['tax_class_id'], $this->config->get('config_tax')));
	} else {
		$price = false;
	}

	if ((float)$result['special']) {
		$special = $this->currency->format($this->tax->calculate($result['special'], $result['tax_class_id'], $this->config->get('config_tax')));
	} else {
		$special = false;
	}

	if ($this->config->get('config_tax')) {
		$tax = $this->currency->format((float)$result['special'] ? $result['special'] : $result['price']);
	} else {
		$tax = false;
	}

	if ($this->config->get('config_review_status')) {
		$rating = (int)$result['rating'];
	} else {
		$rating = false;
	}
	
	$availability = ($result['quantity'] > 0) ? true : false;
	
	$data['products'][] = array(
		'product_id'  => $result['product_id'],
		'thumb'       => $image,
		'name'        => $result['name'],
		'description' => utf8_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, $this->config->get('config_product_description_length')) . '..',
		'availability'=> $availability,
		'price'       => $price,
		'special'     => $special,
		'tax'         => $tax,
		'minimum'     => $result['minimum'] > 0 ? $result['minimum'] : 1,
		'rating'      => $result['rating'],
		'href'        => $this->url->link('product/product', 'path=' . $this->request->get['path'] . '&product_id=' . $result['product_id'] . $url)
	);
}

 

И в файле шаблона, Вы водим по аналогии с тем, как на странице товара выводилось...Переменная будет $product['availability']

 

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

Спасибо Большое! всё ок! Приятно с вами иметь дело.

Да лучше oCmod но его же написать надо. Я в php поверхностно.

Ссылка на комментарий
Поделиться на других сайтах

1 час назад, Adems сказал:

Спасибо Большое! всё ок! Приятно с вами иметь дело.

Да лучше oCmod но его же написать надо. Я в php поверхностно.

Вот нашел вроде норм сборку, как раз то что Вам нужно

https://liveopencart.ru/opencart-moduli-shablony/moduli/seo/microdata-schema-org-[10-v-1]

Ссылка на комментарий
Поделиться на других сайтах

Спасибо еще раз, да то что надо, есть там конечно некоторые моменты, но индивидуально можно поправить на своё усмотрение. Возьму на вооружение. Еще раз СПАСИБО!

Ссылка на комментарий
Поделиться на других сайтах

Join the conversation

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

Гость
Ответить в тему...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  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.

  • Сейчас на странице   0 пользователей

    • Нет пользователей, просматривающих эту страницу