Jump to content

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


Recommended Posts

Доброго всем дня. Так сложились обстоятельства что мне временно приходится править баги и модернизировать проект который работает на движке Simpla CMS . А теперь по порядку:

  1. на сайте был поиск я модернизировал а то он выводил не очень корректные результаты например ты вводишь в строку поиска mi 9 -> результат -> redmi note 9/64 (что-то такое), то есть ищет по вхождениям разделяя сначала фразу в цикле, я его чуть переделал и сделал сначала отображение по строгому вхождению   а затем если это строгое пустое то разделю по словам. После этого результат выводит те товары которые нужны, НО игнорируется условие видимости товаров почему то, т.е. даже если товар в админке отключен то его в результате поиска видно, не смотря на :
     $visible_filter = $this->db->placehold('AND p.visible=?', intval($filter['visible']));
    

    Я уже этот запрос менял и делал вида : 

     $visible_filter = $this->db->placehold('AND p.visible=1');
    

    но это не меняло ситуация. После я решил развернуть этот проект у себя на локалке дабы не боясь что что то сломаю на проде учитывая что там сейчас даже Git не стоит. Отсюда вытекает 2 проблема.

  2. Я гуглил способы развертывания проекта ссылке на этом форуме. После чего я понял что моя версия PHP не подходит я даунгрейд сделал и теперь у меня как и на сервере стоит 5.6. Фронт еще кое как работает, к некоторых местах выбивает ошибку вида :
    Notice: Trying to get property of non-object in /var/www/html/api/Products.php on line 226

    Warning: Invalid argument supplied for foreach() in /var/www/html/simpla/ProductsAdmin.php on line 230
    А так же эта же самая ошибка вылезает в админке когда пытаюсь просмотреть список продуктов то все что я вижу это . И если от ошибки в 226 я могу ее закоментировать на время и она ни на что не повлияет так как там доп условие поиска, то ошибка на 230 строке остается, и если я пытаюсь в файле /api/Products.php в функции get_products() сделать :

var_dump($this->db->query($query));

То результатом будет : bool(false);

Итого: Самая главная сейчас для меня проблема понять почему на локалке у меня такие проблемы с проектом при том что код и база одинаковая что на проде что на локалке. Может у меня что то недоустановлено я уже не знаю я запутался. Если кто встречался или имеет представление как это починить буду рад услышать.

 

PS: давно что то на форумы не писал, прошу прощения может что то не так, но я честно старался что то нагуглить и не нашел рабочего для меня решения. Пока этот пост будет висеть я тоже не оставлю попыток искать способы решения и может где-то еще рыть форумы. 

  • Чуть не забыл : объясните кто нибудь почему таблицы в базе все с префиксом s_ а в запросе в файле  /api/Products.php в функции get_products()  там пишут с двумя нижними подчеркиваниями ?
    FROM __products p
    

     

 

Edited by vlad004
Link to post
Share on other sites

так первый прогресс который я объяснить не могу, НО : товары в админке я получил без ошибок с помощью того что в функции  get_products(), я убрал строку с: 

$group_by = "GROUP BY p.id";
   $query = "SELECT  
					p.id,
					p.url,
					p.sku,
					p.brand_id,
					p.name,
					c.name as `category_name`,
					p.stock,
					p.price,
					p.old_price,
					p.annotation,
					p.body,
					p.shops,
					p.position,
					p.created as created,
					p.visible, 
					p.featured, 
					p.meta_title, 
					p.meta_keywords, 
					p.meta_description, 
					b.name as brand,
					b.url as brand_url
				FROM __products p
				$category_id_filter
				$memory_filter
				$screen_filter
				$os_filter
				$colors_filter
				$gsm_filter
				$cards_filter
				$VoLTE_filter
				LEFT JOIN __brands b ON p.brand_id = b.id
				WHERE 
					1
					$price_filter
					$product_id_filter
					$brand_id_filter
					$features_filter
					$keyword_filter
					$is_featured_filter
					$discounted_filter
					$in_stock_filter
					$visible_filter
//				$group_by ------ Вот эту вот строку я удалил
				ORDER BY $order
					$sql_limit";

Вот узнать бы причину этой проблемы

Edited by vlad004
Link to post
Share on other sites

Чуть не забыл : объясните кто нибудь почему таблицы в базе все с префиксом s_ а в запросе в файле  /api/Products.php в функции get_products()  там пишут с двумя нижними подчеркиваниями ?

 

 

файл api/Database.php

 

	/**
	 * Плейсхолдер для запросов. Пример работы: $query = $db->placehold('SELECT name FROM products WHERE id=?', $id);
	 */
	public function placehold()
	{
		$args = func_get_args();	
		$tmpl = array_shift($args);
		// Заменяем все __ на префикс, но только необрамленные кавычками
		$tmpl = preg_replace('/([^"\'0-9a-z_])__([a-z_]+[^"\'])/ui', "\$1".$this->config->db_prefix."\$2", $tmpl);
		if(!empty($args))
		{
			$result = $this->sql_placeholder_ex($tmpl, $args, $error); 
			if ($result === false)
			{ 
				$error = "Placeholder substitution error. Diagnostics: \"$error\""; 
				trigger_error($error, E_USER_WARNING); 
				return false; 
			} 
			return $result;
		}
		else
			return $tmpl;
	}
	
Link to post
Share on other sites

 

файл api/Database.php

 

	/**
	 * Плейсхолдер для запросов. Пример работы: $query = $db->placehold('SELECT name FROM products WHERE id=?', $id);
	 */
	public function placehold()
	{
		$args = func_get_args();	
		$tmpl = array_shift($args);
		// Заменяем все __ на префикс, но только необрамленные кавычками
		$tmpl = preg_replace('/([^"\'0-9a-z_])__([a-z_]+[^"\'])/ui', "\$1".$this->config->db_prefix."\$2", $tmpl);
		if(!empty($args))
		{
			$result = $this->sql_placeholder_ex($tmpl, $args, $error); 
			if ($result === false)
			{ 
				$error = "Placeholder substitution error. Diagnostics: \"$error\""; 
				trigger_error($error, E_USER_WARNING); 
				return false; 
			} 
			return $result;
		}
		else
			return $tmpl;
	}
	

ага ну тут теперь попонятнее немного, спасибо)

Link to post
Share on other sites

так первый прогресс который я объяснить не могу, НО : товары в админке я получил без ошибок с помощью того что в функции  get_products(), я убрал строку с: 

$group_by = "GROUP BY p.id";
   $query = "SELECT  
					p.id,
					p.url,
					p.sku,
					p.brand_id,
					p.name,
					c.name as `category_name`,
					p.stock,
					p.price,
					p.old_price,
					p.annotation,
					p.body,
					p.shops,
					p.position,
					p.created as created,
					p.visible, 
					p.featured, 
					p.meta_title, 
					p.meta_keywords, 
					p.meta_description, 
					b.name as brand,
					b.url as brand_url
				FROM __products p
				$category_id_filter
				$memory_filter
				$screen_filter
				$os_filter
				$colors_filter
				$gsm_filter
				$cards_filter
				$VoLTE_filter
				LEFT JOIN __brands b ON p.brand_id = b.id
				WHERE 
					1
					$price_filter
					$product_id_filter
					$brand_id_filter
					$features_filter
					$keyword_filter
					$is_featured_filter
					$discounted_filter
					$in_stock_filter
					$visible_filter
//				$group_by ------ Вот эту вот строку я удалил
				ORDER BY $order
					$sql_limit";

Вот узнать бы причину этой проблемы

  • Так же после этих изменений товары на фронте начали выводиться нормально и без ошибок, что собственно решило мою 2 проблему.
  • Осталось понять почему при поиске не работает условие при котором должно выводить только видимые товары а мне прям все отображает
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
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.

Loading...
×
×
  • Create New...