vlad004 Опубликовано 26 августа, 2019 Жалоба Поделиться Опубликовано 26 августа, 2019 (изменено) Доброго всем дня. Так сложились обстоятельства что мне временно приходится править баги и модернизировать проект который работает на движке Simpla CMS . А теперь по порядку:на сайте был поиск я модернизировал а то он выводил не очень корректные результаты например ты вводишь в строку поиска 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 проблема. Я гуглил способы развертывания проекта ссылке на этом форуме. После чего я понял что моя версия PHP не подходит я даунгрейд сделал и теперь у меня как и на сервере стоит 5.6. Фронт еще кое как работает, к некоторых местах выбивает ошибку вида :Notice: Trying to get property of non-object in /var/www/html/api/Products.php on line 226Warning: 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 Изменено 26 августа, 2019 пользователем vlad004 Цитата Ссылка на сообщение Поделиться на другие сайты
vlad004 Опубликовано 26 августа, 2019 Автор Жалоба Поделиться Опубликовано 26 августа, 2019 (изменено) так первый прогресс который я объяснить не могу, НО : товары в админке я получил без ошибок с помощью того что в функции 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"; Вот узнать бы причину этой проблемы Изменено 26 августа, 2019 пользователем vlad004 Цитата Ссылка на сообщение Поделиться на другие сайты
shooroop Опубликовано 26 августа, 2019 Жалоба Поделиться Опубликовано 26 августа, 2019 Чуть не забыл : объясните кто нибудь почему таблицы в базе все с префиксом 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; } Цитата Ссылка на сообщение Поделиться на другие сайты
vlad004 Опубликовано 26 августа, 2019 Автор Жалоба Поделиться Опубликовано 26 августа, 2019 файл 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; } ага ну тут теперь попонятнее немного, спасибо) Цитата Ссылка на сообщение Поделиться на другие сайты
vlad004 Опубликовано 27 августа, 2019 Автор Жалоба Поделиться Опубликовано 27 августа, 2019 так первый прогресс который я объяснить не могу, НО : товары в админке я получил без ошибок с помощью того что в функции 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 проблему.Осталось понять почему при поиске не работает условие при котором должно выводить только видимые товары а мне прям все отображает Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.