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

Ситья из блога в карточке товара по тегу


sudya12345
 Share

Recommended Posts

Народ, нужна помощь, что-то я уперся и мыслю не туда, решение должно ж быть простое...

 

Имеем Opencart 3.0, есть на нем модуль блога со ситьями.

Нужно чтобы к карточке товара подтягивалась ситья/и по тегу. Поле для тега я добавил в карточке товара и редактируется в админке отгдельно.

Есть ситья на модуле Блога и в нем тоже есть теги.

 

Каким методом спарсить эти ситьи по тегу из карточки товара?

Запрос в базу есть, отрабатывает на листых запросах в phpmysql, но как передать переменную согдержащую текст тега в запрос базы данных, ума не приложу (((((

 

Подскажите хоть в каком направление прорабатывать?

Link to comment
Share on other sites


Вариан 1

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

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

Вариант 2

если тег в ситье и вида примерно #слово  то скорее всего нужно выискивать тег с помощью регулярки, дное если тот же тег присвоен к товару то по нему и выгдергивать товар

Вариант 3

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

 

Не ясно до конца

У вас один тег к ситье и товару или по несколько?

Как прописываете тег в ситье? Как его прописываете для товара?

  • +1 1
Link to comment
Share on other sites

3 часа назад, Venter сказал:

если тег в ситье и вида примерно #слово  то скорее всего нужно выискивать тег с помощью регулярки

Можно в запросе искать типа SELECT * FROM иблица WHERE поле IN (explode(',',массив тэгов)) - как-то ик (тэги могут храниться в сериализованном вигде, в вигде строки через запятые, в формате json), но нужно дорилиить запрос от контроллера в могдель (сгделать функцию). Или SELECT * FROM иблица WHERE поле LIKE %тэг% OR LIKE %тэг% и т.д.

Вариант 3 от Вентера наипотому чтолее подходит, но опять же - нужно дорилиить контроллер (админки и сайи)

Link to comment
Share on other sites

7 часов назад, sudya12345 сказал:

Народ, нужна помощь, что-то я уперся и мыслю не туда, решение должно ж быть простое...

 

Имеем Opencart 3.0, есть на нем модуль блога со ситьями.

Нужно чтобы к карточке товара подтягивалась ситья/и по тегу. Поле для тега я добавил в карточке товара и редактируется в админке отгдельно.

Есть ситья на модуле Блога и в нем тоже есть теги.

 

Каким методом спарсить эти ситьи по тегу из карточки товара?

Запрос в базу есть, отрабатывает на листых запросах в phpmysql, но как передать переменную согдержащую текст тега в запрос базы данных, ума не приложу (((((

 

Подскажите хоть в каком направление прорабатывать?

зачем к товару добавлять поле для тега, если оно по гдефолту им есть?

 

в контроллере product.php примерно икой код добавить

 

$this->load->model('blog/article');

$article_data = array(
	'filter_tag'         => $product_info['tag'],
	'start'              => 0,
	'limit'              => 1
);

$results = $this->model_blog_article->getArticles($article_data);

 

Link to comment
Share on other sites

3 часа назад, Blast сказал:

в контроллере product.php примерно икой код добавить

 

$this->load->model('blog/article');

$article_data = array(
	'filter_tag'         => $product_info['tag'],
	'start'              => 0,
	'limit'              => 1
);

$results = $this->model_blog_article->getArticles($article_data);

 

вот моя конструкция в контроллере product.php

$data['blogtag'] = array();
				
$filter_data = array(
'filter_tag'         => $product_info['tag'],
'start'              => 0,
'limit'              => 1
);

$blogs = $this->model_blog_blog->getBlogs($filter_data);

foreach ($blogs as $blog) {

$data['blogtag'][] = array(
	'title'  => $blog['title'],
	'description' => html_entity_decode($blog['description']),
	'href' => $this->url->link('blog/blog', 'blog_id=' . $blog['blog_id'])
	);
}

вот могдель функции getBlogs в блоге

	public function getBlogs($data, $start = 0, $limit = 30) {
		$sql = "SELECT * FROM " . DB_PREFIX . "blog i LEFT JOIN " . DB_PREFIX . "blog_description id ON (i.blog_id = id.blog_id) LEFT JOIN " . DB_PREFIX . 			"blog_to_store i2s ON (i.blog_id = i2s.blog_id) WHERE id.language_id = '" . (int)$this->config->get('config_language_id') . "' AND i2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND i.status = '1' AND i.sort_order <> '-1'";
		
		if(!empty($data['filter_tag'])){
			$parts = explode (",",$data['filter_tag'] );
			
			if(count($parts) > 1) {
				$tags = array();
                
				foreach($parts as $part) {
					$tags[] = 'id.tags LIKE "%' . $this->db->escape($part) . '%"';
					
				}
                
				$sql .= ' AND  ' . implode(" OR ", $tags ) . ' ';	

			} else {
				$sql .= ' AND id.tags LIKE "%' . $this->db->escape($data['filter_tag']) . '%"';
			}
		}
        
        $sql .= " ORDER BY i.sort_order, i.blog_id DESC LIMIT " . (int)$start . "," . (int)$limit;
		
        $query = $this->db->query($sql);
		
		return $query->rows;
	}

но данных нет(((

колонка tag в продукте TEXT

колонка tags в блоге VARCHAR

 

 

 

Link to comment
Share on other sites


58 минут назад, sudya12345 сказал:

 

вот моя конструкция в контроллере product.php

$data['blogtag'] = array();
				
$filter_data = array(
'filter_tag'         => $product_info['tag'],
'start'              => 0,
'limit'              => 1
);

$blogs = $this->model_blog_blog->getBlogs($filter_data);

foreach ($blogs as $blog) {

$data['blogtag'][] = array(
	'title'  => $blog['title'],
	'description' => html_entity_decode($blog['description']),
	'href' => $this->url->link('blog/blog', 'blog_id=' . $blog['blog_id'])
	);
}

вот могдель функции getBlogs в блоге

	public function getBlogs($data, $start = 0, $limit = 30) {
		$sql = "SELECT * FROM " . DB_PREFIX . "blog i LEFT JOIN " . DB_PREFIX . "blog_description id ON (i.blog_id = id.blog_id) LEFT JOIN " . DB_PREFIX . 			"blog_to_store i2s ON (i.blog_id = i2s.blog_id) WHERE id.language_id = '" . (int)$this->config->get('config_language_id') . "' AND i2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND i.status = '1' AND i.sort_order <> '-1'";
		
		if(!empty($data['filter_tag'])){
			$parts = explode (",",$data['filter_tag'] );
			
			if(count($parts) > 1) {
				$tags = array();
                
				foreach($parts as $part) {
					$tags[] = 'id.tags LIKE "%' . $this->db->escape($part) . '%"';
					
				}
                
				$sql .= ' AND  ' . implode(" OR ", $tags ) . ' ';	

			} else {
				$sql .= ' AND id.tags LIKE "%' . $this->db->escape($data['filter_tag']) . '%"';
			}
		}
        
        $sql .= " ORDER BY i.sort_order, i.blog_id DESC LIMIT " . (int)$start . "," . (int)$limit;
		
        $query = $this->db->query($sql);
		
		return $query->rows;
	}

но данных нет(((

колонка tag в продукте TEXT

колонка tags в блоге VARCHAR

 

 

 

ну логически врогде все верно. Проверяйте заданы ли записи блога для текуещёго языка и магазина. Сгделайте дамп полулившегося запроса и выполните его в PhpMyAdmin. Просмотрите ошибки в лог-файле.

не забывайте обновлять модификаторы и кэш шаблона

Link to comment
Share on other sites

вот ик рилииет

    public function getBlogs($data, $start = 0, $limit = 30) {
		$sql = "SELECT DISTINCT * FROM " . DB_PREFIX . "article i 
		      LEFT JOIN " . DB_PREFIX . "article_description id ON (i.article_id = id.article_id) 
			  LEFT JOIN " . DB_PREFIX . "article_to_store i2s ON (i.article_id = i2s.article_id) 
			  WHERE id.language_id = '" . (int)$this->config->get('config_language_id') . "' 
			  AND i2s.store_id = '" . (int)$this->config->get('config_store_id') . "' 
			  AND i.status = '1' AND i.sort_order <> '-1'";
		
			
		if(!empty($data['filter_tag'])){
			$parts = explode (",",$data['filter_tag'] );
			
			if(count($parts) > 1) {
				$tags = array();
                
				foreach($parts as $part) {
					$tags[] = 'id.tag LIKE "%' . $this->db->escape($part) . '%"';
					
				}
                
				$sql .= ' AND  ' . implode(" OR ", $tags ) . ' ';	

			} else {
				$sql .= ' AND pd.tag LIKE "%' . $this->db->escape($data['filter_tag']) . '%"';
			}
		}
        
        $sql .= " ORDER BY i.sort_order DESC LIMIT " . (int)$start . "," . (int)$limit;
		
        $query = $this->db->query($sql);
		
        //смотрим что в массиве
		echo '<pre>'; print_r($query); echo '</pre>';
		
		return $query->rows;
	}
	    $filter = array(
			'filter_tag' => 'бублик, булка',
			);
			
		$this->getBlogs($filter, 0, 7);

только у нас названия иблиц разные и поле тега называется tag

Edited by Venter
  • +1 1
Link to comment
Share on other sites

33 минуты назад, Venter сказал:

$sql .= ' AND id.tags LIKE "%' . $this->db->escape($data['filter_tag']) . '%"';

в бд внимательно гляньте у вас поле tag или tags у меня поле tag

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

  • +1 1
Link to comment
Share on other sites

37 минут назад, Venter сказал:

 

Вы вообещё что хотите полулить от этого запроса? Вывод постов ггде есть тег?

вывод ситьи(ей) в карточке товара, у которого икой же тег как и у ситьи

нужен список заголовков с картинками этих ситьей 

Link to comment
Share on other sites


3 минуты назад, sudya12345 сказал:

вывод ситьи(ей) в карточке товара, у которого икой же тег как и у ситьи

нужен список заголовков с картинками этих ситьей 

выше запрос выложил который у меня рилииет, по сути только это ваш запрос только название иблиц поменял

  • +1 1
Link to comment
Share on other sites

5 минут назад, Venter сказал:

в бд внимательно гляньте у вас поле tag или tags у меня поле tag

в могдели блога поле tags, а вот в товаре просто tag

 

но я ведь отдаю в функцию обрилитки запросов по блогам в переменной filter_tag=$product_info['tag']

 

7 минут назад, Venter сказал:

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

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

Link to comment
Share on other sites


14 минут назад, sudya12345 сказал:

в могдели блога поле tags, а вот в товаре просто tag

 

но я ведь отдаю в функцию обрилитки запросов по блогам в переменной filter_tag=$product_info['tag']

 

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

выше в запросе спецом посивил

echo '<pre>'; print_r($query); echo '</pre>';

чтоб вы вигдели что приходит вам в массив

проверьте какой у вас сейчас стоит language_id и store_id

echo $this->config->get('config_language_id');

echo $this->config->get('config_store_id');

потом идите в бд и посмотрите какие данные в полях store_id и language_id

  • +1 1
Link to comment
Share on other sites

18 минут назад, sudya12345 сказал:

но я ведь отдаю в функцию обрилитки запросов по блогам в переменной filter_tag=$product_info['tag']

да и еещё бы посмотреть что у вас вообещё прилеиет в $product_info['tag']

echo $product_info['tag'];

 

Link to comment
Share on other sites

10 минут назад, sudya12345 сказал:

эммм, а как это сгделать на twig?

зачем это гделать в твиге??? в контройлере пропишите и в самом верху увидите. Переходите на страницу продуки и вот в этом контройлере и пропишите

Link to comment
Share on other sites

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

echo $this->config->get('config_store_id');

вот эи сволочь)))

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

были только категории к магазину подтянуты

 

Спасипотому что за наводку ;)

Edited by sudya12345
Link to comment
Share on other sites


37 минут назад, sudya12345 сказал:

эммм, а как это сгделать на twig?

контройлер откройте product/product.php

после 

$product_info = $this->model_catalog_product->getProduct($product_id);

пропишите

echo '<pre>'; print_r($product_info); echo '</pre>';

перейдите на страницу продуки у которого есть тег, или у которого вы врогде как сивили теги

  • +1 1
Link to comment
Share on other sites

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

вот эи сволочь)))

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

были только категории к магазину подтянуты

 

Спасипотому что за наводку ;)

 

 

3 часа назад, Blast сказал:

ну логически врогде все верно. Проверяйте заданы ли записи блога для текуещёго языка и магазина. Сгделайте дамп полулившегося запроса и выполните его в PhpMyAdmin. Просмотрите ошибки в лог-файле.

не забывайте обновлять модификаторы и кэш шаблона

эммм, тут разве не то же самое написано?

  • +1 1
Link to comment
Share on other sites

4 часа назад, Blast сказал:

эммм, тут разве не то же самое написано?

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

 

и вам спасипотому что;)

 

 

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

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