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

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


sudya12345

Recommended Posts

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

 

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

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

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

 

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

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

 

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

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


Вариан 1

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

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

Вариант 2

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

Вариант 3

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

 

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

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

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

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

  В 20.01.2021 в 04:00, Venter сказав:

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

Expand  

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

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

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

  В 20.01.2021 в 01:25, sudya12345 сказав:

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

 

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

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

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

 

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

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

 

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

Expand  

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

 

в контроллере 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);

 

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

  В 20.01.2021 в 08:43, 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);
Expand  

 

вот моя конструкция в контроллере 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

 

 

 

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


  В 20.01.2021 в 12:08, 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

 

 

 

Expand  

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

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

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

вот так работает

    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

Змінено користувачем Venter
  • +1 1
Надіслати
Поділитися на інших сайтах

  В 20.01.2021 в 13:33, Venter сказав:

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

Expand  

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

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

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

  В 20.01.2021 в 13:33, Venter сказав:

 

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

Expand  

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

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

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


  В 20.01.2021 в 14:12, sudya12345 сказав:

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

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

Expand  

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

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

  В 20.01.2021 в 14:10, Venter сказав:

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

Expand  

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

 

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

 

  В 20.01.2021 в 14:10, Venter сказав:

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

Expand  

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

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


  В 20.01.2021 в 14:18, sudya12345 сказав:

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

 

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

 

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

Expand  

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

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
Надіслати
Поділитися на інших сайтах

  В 20.01.2021 в 14:18, sudya12345 сказав:

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

Expand  

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

echo $product_info['tag'];

 

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

  В 20.01.2021 в 15:13, sudya12345 сказав:

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

Expand  

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

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

  В 20.01.2021 в 14:36, Venter сказав:

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

Expand  

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

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

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

 

Спасибо за наводку ;)

Змінено користувачем sudya12345
Надіслати
Поділитися на інших сайтах


  В 20.01.2021 в 15:13, sudya12345 сказав:

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

Expand  

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

после 

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

пропишите

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

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

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

  В 20.01.2021 в 15:51, sudya12345 сказав:

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

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

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

 

Спасибо за наводку ;)

Expand  

 

 

  В 20.01.2021 в 13:10, Blast сказав:

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

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

Expand  

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

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

  В 20.01.2021 в 17:05, Blast сказав:

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

Expand  

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

 

и вам спасибо;)

 

 

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


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

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

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

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

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

Вхід

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

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

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

Important Information

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