-
Публикаций
36 -
Зарегистрирован
-
Посещение
Тип публикации
Профили
Форум
Дополнения
Статьи
FAQ
Наши новости
Наши услуги
Блоги
module__dplus_manager
Сообщения, опубликованные пользователем Magi
-
-
>Все Кейворды меняються в Админке
Ну на сайте-то кейворды и дескрипшены прописаны.
Похоже остается только ждать n-ое количество времени.
-
Примерно месяц назад я залил магазин на хостинг, дабы заказчик смог начать наполнять его контентом. Сайт при этом был закрыт на обслуживание еще около месяца. После открытия я добавил урл в гугл, зарегистрировался в вебмастер тулз, залил sitemap и robots.txt, через несколько дней сайт проиндексировался и появилась статистика по ключевым словам. Проблема в том, что эти ключевые слова - содержимое пустой странички с сообщением о обслуживании.
Например:
Сменяться ли ключевые слова со временем?
Можно ли как-то их удалить и заменить на слова из мета-описания и мета-квейвордс?
-
Благодарю, больше ошибок нет.
-
Помогите исправить проблемку.
На странице сайтмепа повторяется ошибка:
Warning: Missing argument 2 for ModelCatalogProduct::getProductsByCategoryId(), called in /var/www/magimax/data/www/mir-zakolok.com.ua/catalog/controller/feed/google_sitemap.php on line 87 and defined in /var/www/magimax/data/www/mir-zakolok.com.ua/catalog/model/catalog/product.php on line 15Warning: Missing argument 2 for ModelCatalogProduct::getProductsByCategoryId(), called in /var/www/magimax/data/www/mir-zakolok.com.ua/catalog/controller/feed/google_sitemap.php on line 87 and defined in /var/www/magimax/data/www/mir-zakolok.com.ua/catalog/model/catalog/product.php on line 15Warning: Missing argument 2 for ModelCatalogProduct::getProductsByCategoryId(), called in /var/www/magimax/data/www/mir-zakolok.com.ua/catalog/controller/feed/google_sitemap.php on line 87 and defined in /var/www/magimax/data/www/mir-zakolok.com.ua/catalog/model/catalog/product.php on line 15Warning: Missing argument 2 for ModelCatalogProduct::getProductsByCategoryId(), called in /var/www/magimax/data/www/mir-zakolok.com.ua/catalog/controller/feed/google_sitemap.php on line 87 and defined in /var/www/magimax/data/www/mir-zakolok.com.ua/catalog/model/catalog/product.php on line 15Warning: Missing argument 2 for ModelCatalogProduct::getProductsByCategoryId(), called in /var/www/magimax/data/www/mir-zakolok.com.ua/catalog/controller/feed/google_sitemap.php on line 87 and defined in /var/www/magimax/data/www/mir-zakolok.com.ua/catalog/model/catalog/product.php on line 15Warning: Missing argument 2 for
файл product.php
<?php class ModelCatalogProduct extends Model { public function getProduct($product_id) { $query = $this->db->query("SELECT DISTINCT *, pd.name AS name, p.image, m.name AS manufacturer, ss.name AS stock FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN " . DB_PREFIX . "manufacturer m ON (p.manufacturer_id = m.manufacturer_id) LEFT JOIN " . DB_PREFIX . "stock_status ss ON (p.stock_status_id = ss.stock_status_id) WHERE p.product_id = '" . (int)$product_id . "' AND pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND ss.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p.date_available <= NOW() AND p.status = '1'"); return $query->row; } public function getProducts() { $query = $this->db->query("SELECT DISTINCT *, pd.name AS name, p.image, m.name AS manufacturer, ss.name AS stock, wcd.unit AS weight_class FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN " . DB_PREFIX . "manufacturer m ON (p.manufacturer_id = m.manufacturer_id) LEFT JOIN " . DB_PREFIX . "stock_status ss ON (p.stock_status_id = ss.stock_status_id) LEFT JOIN " . DB_PREFIX . "weight_class_description wcd ON (p.weight_class_id = wcd.weight_class_id) WHERE pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND wcd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND ss.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p.date_available <= NOW() AND p.status = '1'"); return $query->rows; } public function getProductsByCategoryId($category_id, $sort = 'p.sort_order', $order = 'ASC', $start = 0, $limit = 20) { $sql = "SELECT *, pd.name AS name, p.image, m.name AS manufacturer, ss.name AS stock, (SELECT AVG(r.rating) FROM " . DB_PREFIX . "review r WHERE p.product_id = r.product_id GROUP BY r.product_id) AS rating FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN " . DB_PREFIX . "manufacturer m ON (p.manufacturer_id = m.manufacturer_id) LEFT JOIN " . DB_PREFIX . "stock_status ss ON (p.stock_status_id = ss.stock_status_id) LEFT JOIN " . DB_PREFIX . "product_to_category p2c ON (p.product_id = p2c.product_id) WHERE p.status = '1' AND p.date_available <= NOW() AND pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND ss.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p2c.category_id = '" . (int)$category_id . "'"; $sort_data = array( 'pd.name', 'p.sort_order', 'special', 'rating' ); if (in_array($sort, $sort_data)) { if ($sort == 'pd.name') { $sql .= " ORDER BY LCASE(" . $sort . ")"; } else { $sql .= " ORDER BY " . $sort; } } else { $sql .= " ORDER BY p.sort_order"; } if ($order == 'DESC') { $sql .= " DESC"; } else { $sql .= " ASC"; } if ($start < 0) { $start = 0; } $sql .= " LIMIT " . (int)$start . "," . (int)$limit; $query = $this->db->query($sql); return $query->rows; } public function getTotalProductsByCategoryId($category_id = 0) { $query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "product_to_category p2c LEFT JOIN " . DB_PREFIX . "product p ON (p2c.product_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND p2c.category_id = '" . (int)$category_id . "'"); return $query->row['total']; } public function getProductsByManufacturerId($manufacturer_id, $sort = 'p.sort_order', $order = 'ASC', $start = 0, $limit = 20) { $sql = "SELECT *, pd.name AS name, p.image, m.name AS manufacturer, ss.name AS stock, (SELECT AVG(r.rating) FROM " . DB_PREFIX . "review r WHERE p.product_id = r.product_id GROUP BY r.product_id) AS rating FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN " . DB_PREFIX . "manufacturer m ON (p.manufacturer_id = m.manufacturer_id) LEFT JOIN " . DB_PREFIX . "stock_status ss ON (p.stock_status_id = ss.stock_status_id) WHERE p.status = '1' AND p.date_available <= NOW() AND pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND ss.language_id = '" . (int)$this->config->get('config_language_id') . "' AND m.manufacturer_id = '" . (int)$manufacturer_id. "'"; $sort_data = array( 'pd.name', 'p.sort_order', 'special', 'rating' ); if (in_array($sort, $sort_data)) { if ($sort == 'pd.name') { $sql .= " ORDER BY LCASE(" . $sort . ")"; } else { $sql .= " ORDER BY " . $sort; } } else { $sql .= " ORDER BY p.sort_order"; } if ($order == 'DESC') { $sql .= " DESC"; } else { $sql .= " ASC"; } if ($start < 0) { $start = 0; } $sql .= " LIMIT " . (int)$start . "," . (int)$limit; $query = $this->db->query($sql); return $query->rows; } public function getTotalProductsByManufacturerId($manufacturer_id = 0) { $query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "product WHERE status = '1' AND date_available <= NOW() AND manufacturer_id = '" . (int)$manufacturer_id . "'"); return $query->row['total']; } public function getProductsByTag($tag, $category_id = 0, $sort = 'p.sort_order', $order = 'ASC', $start = 0, $limit = 20) { if ($tag) { $sql = "SELECT *, pd.name AS name, p.image, m.name AS manufacturer, ss.name AS stock, (SELECT AVG(r.rating) FROM " . DB_PREFIX . "review r WHERE p.product_id = r.product_id GROUP BY r.product_id) AS rating FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_tags pt ON (p.product_id = pt.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN " . DB_PREFIX . "manufacturer m ON (p.manufacturer_id = m.manufacturer_id) LEFT JOIN " . DB_PREFIX . "stock_status ss ON (p.stock_status_id = ss.stock_status_id) WHERE pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND ss.language_id = '" . (int)$this->config->get('config_language_id') . "' AND pt.language_id = '" . (int)$this->config->get('config_language_id') . "' AND (LCASE(pt.tag) = '" . $this->db->escape(strtolower($tag)) . "'"; $keywords = explode(" ", $tag); foreach ($keywords as $keyword) { $sql .= " OR LCASE(pt.tag) = '" . $this->db->escape(strtolower($keyword)) . "'"; } $sql .= ")"; if ($category_id) { $data = array(); $this->load->model('catalog/category'); $string = rtrim($this->getPath($category_id), ','); foreach (explode(',', $string) as $category_id) { $data[] = "category_id = '" . (int)$category_id . "'"; } $sql .= " AND p.product_id IN (SELECT product_id FROM " . DB_PREFIX . "product_to_category WHERE " . implode(" OR ", $data) . ")"; } $sql .= " AND p.status = '1' AND p.date_available <= NOW() GROUP BY p.product_id"; $sort_data = array( 'pd.name', 'p.sort_order', 'special', 'rating' ); if (in_array($sort, $sort_data)) { if ($sort == 'pd.name') { $sql .= " ORDER BY LCASE(" . $sort . ")"; } else { $sql .= " ORDER BY " . $sort; } } else { $sql .= " ORDER BY p.sort_order"; } if ($order == 'DESC') { $sql .= " DESC"; } else { $sql .= " ASC"; } if ($start < 0) { $start = 0; } $sql .= " LIMIT " . (int)$start . "," . (int)$limit; $query = $this->db->query($sql); $products = array(); foreach ($query->rows as $key => $value) { $products[$value['product_id']] = $this->getProduct($value['product_id']); } return $products; } } public function getProductsByKeyword($keyword, $category_id = 0, $description = FALSE, $model = FALSE, $sort = 'p.sort_order', $order = 'ASC', $start = 0, $limit = 20) { if ($keyword) { $sql = "SELECT *, pd.name AS name, p.image, m.name AS manufacturer, ss.name AS stock, (SELECT AVG(r.rating) FROM " . DB_PREFIX . "review r WHERE p.product_id = r.product_id GROUP BY r.product_id) AS rating FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN " . DB_PREFIX . "manufacturer m ON (p.manufacturer_id = m.manufacturer_id) LEFT JOIN " . DB_PREFIX . "stock_status ss ON (p.stock_status_id = ss.stock_status_id) WHERE pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND ss.language_id = '" . (int)$this->config->get('config_language_id') . "'"; if (!$description) { $sql .= " AND (LCASE(pd.name) LIKE '%" . $this->db->escape(strtolower($keyword)) . "%'"; } else { $sql .= " AND (LCASE(pd.name) LIKE '%" . $this->db->escape(strtolower($keyword)) . "%' OR LCASE(pd.description) LIKE '%" . $this->db->escape(strtolower($keyword)) . "%'"; } if (!$model) { $sql .= ")"; } else { $sql .= " OR LCASE(p.model) LIKE '%" . $this->db->escape(strtolower($keyword)) . "%')"; } if ($category_id) { $data = array(); $this->load->model('catalog/category'); $string = rtrim($this->getPath($category_id), ','); foreach (explode(',', $string) as $category_id) { $data[] = "category_id = '" . (int)$category_id . "'"; } $sql .= " AND p.product_id IN (SELECT product_id FROM " . DB_PREFIX . "product_to_category WHERE " . implode(" OR ", $data) . ")"; } $sql .= " AND p.status = '1' AND p.date_available <= NOW() GROUP BY p.product_id"; $sort_data = array( 'pd.name', 'p.sort_order', 'special', 'rating' ); if (in_array($sort, $sort_data)) { if ($sort == 'pd.name') { $sql .= " ORDER BY LCASE(" . $sort . ")"; } else { $sql .= " ORDER BY " . $sort; } } else { $sql .= " ORDER BY p.sort_order"; } if ($order == 'DESC') { $sql .= " DESC"; } else { $sql .= " ASC"; } if ($start < 0) { $start = 0; } $sql .= " LIMIT " . (int)$start . "," . (int)$limit; $query = $this->db->query($sql); return $query->rows; } return 0; } public function getTotalProductsByKeyword($keyword, $category_id = 0, $description = FALSE, $model = FALSE) { if ($keyword) { $sql = "SELECT COUNT(*) AS total FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "'"; if (!$description) { $sql .= " AND (LCASE(pd.name) LIKE '%" . $this->db->escape(strtolower($keyword)) . "%'"; } else { $sql .= " AND (LCASE(pd.name) LIKE '%" . $this->db->escape(strtolower($keyword)) . "%' OR LCASE(pd.description) LIKE '%" . $this->db->escape(strtolower($keyword)) . "%'"; } if (!$model) { $sql .= ")"; } else { $sql .= " OR LCASE(p.model) LIKE '%" . $this->db->escape(strtolower($keyword)) . "%')"; } if ($category_id) { $data = array(); $this->load->model('catalog/category'); $string = rtrim($this->getPath($category_id), ','); foreach (explode(',', $string) as $category_id) { $data[] = "category_id = '" . (int)$category_id . "'"; } $sql .= " AND p.product_id IN (SELECT product_id FROM " . DB_PREFIX . "product_to_category WHERE " . implode(" OR ", $data) . ")"; } $sql .= " AND p.status = '1' AND p.date_available <= NOW()"; $query = $this->db->query($sql); if ($query->num_rows) { return $query->row['total']; } else { return 0; } } return 0; } public function getTotalProductsByTag($tag, $category_id = 0) { if ($tag) { $sql = "SELECT COUNT(*) AS total FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_tags pt ON (p.product_id = pt.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN " . DB_PREFIX . "manufacturer m ON (p.manufacturer_id = m.manufacturer_id) LEFT JOIN " . DB_PREFIX . "stock_status ss ON (p.stock_status_id = ss.stock_status_id) WHERE pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND ss.language_id = '" . (int)$this->config->get('config_language_id') . "' AND pt.language_id = '" . (int)$this->config->get('config_language_id') . "' AND (LCASE(pt.tag) = '" . $this->db->escape(strtolower($tag)) . "'"; $keywords = explode(" ", $tag); foreach ($keywords as $keyword) { $sql .= " OR LCASE(pt.tag) = '" . $this->db->escape(strtolower($keyword)) . "'"; } $sql .= ")"; if ($category_id) { $data = array(); $this->load->model('catalog/category'); $string = rtrim($this->getPath($category_id), ','); foreach (explode(',', $string) as $category_id) { $data[] = "category_id = '" . (int)$category_id . "'"; } $sql .= " AND p.product_id IN (SELECT product_id FROM " . DB_PREFIX . "product_to_category WHERE " . implode(" OR ", $data) . ")"; } $sql .= " AND p.status = '1' AND p.date_available <= NOW()"; $query = $this->db->query($sql); if ($query->num_rows) { return $query->row['total']; } else { return 0; } } return 0; } public function getPath($category_id) { $string = $category_id . ','; $results = $this->model_catalog_category->getCategories($category_id); foreach ($results as $result) { $string .= $this->getPath($result['category_id']); } return $string; } public function getLatestProducts($limit) { $product_data = $this->cache->get('product.latest.' . $this->config->get('config_language_id') . '.' . (int)$this->config->get('config_store_id') . '.' . $limit); if (!$product_data) { $query = $this->db->query("SELECT *, pd.name AS name, p.image, m.name AS manufacturer, ss.name AS stock, (SELECT AVG(r.rating) FROM " . DB_PREFIX . "review r WHERE p.product_id = r.product_id GROUP BY r.product_id) AS rating FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN " . DB_PREFIX . "manufacturer m ON (p.manufacturer_id = m.manufacturer_id) LEFT JOIN " . DB_PREFIX . "stock_status ss ON (p.stock_status_id = ss.stock_status_id) WHERE p.status = '1' AND p.date_available <= NOW() AND pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND ss.language_id = '" . (int)$this->config->get('config_language_id') . "' ORDER BY p.date_added DESC LIMIT " . (int)$limit); $product_data = $query->rows; $this->cache->set('product.latest.' . $this->config->get('config_language_id') . '.' . (int)$this->config->get('config_store_id') . '.' . $limit, $product_data); } return $product_data; } public function getPopularProducts($limit) { $query = $this->db->query("SELECT *, pd.name AS name, p.image, m.name AS manufacturer, ss.name AS stock, (SELECT AVG(r.rating) FROM " . DB_PREFIX . "review r WHERE p.product_id = r.product_id GROUP BY r.product_id) AS rating FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN " . DB_PREFIX . "manufacturer m ON (p.manufacturer_id = m.manufacturer_id) LEFT JOIN " . DB_PREFIX . "stock_status ss ON (p.stock_status_id = ss.stock_status_id) WHERE p.status = '1' AND p.date_available <= NOW() AND pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND ss.language_id = '" . (int)$this->config->get('config_language_id') . "' ORDER BY p.viewed, p.date_added DESC LIMIT " . (int)$limit); return $query->rows; } public function getFeaturedProducts($limit) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_featured f LEFT JOIN " . DB_PREFIX . "product p ON (f.product_id=p.product_id) LEFT JOIN " . DB_PREFIX . "product_description pd ON (f.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' LIMIT " . (int)$limit); return $query->rows; } public function getBestSellerProducts($limit) { $product_data = $this->cache->get('product.bestseller.' . $this->config->get('config_language_id') . '.' . (int)$this->config->get('config_store_id') . '.' . $limit); if (!$product_data) { $product_data = array(); $query = $this->db->query("SELECT op.product_id, SUM(op.quantity) AS total FROM " . DB_PREFIX . "order_product op LEFT JOIN `" . DB_PREFIX . "order` o ON (op.order_id = o.order_id) WHERE o.order_status_id > '0' GROUP BY op.product_id ORDER BY total DESC LIMIT " . (int)$limit); foreach ($query->rows as $result) { $product_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE p.product_id = '" . (int)$result['product_id'] . "' AND p.status = '1' AND p.date_available <= NOW() AND pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "'"); if ($product_query->num_rows) { $product_data[] = $product_query->row; } } $this->cache->set('product.bestseller.' . $this->config->get('config_language_id') . '.' . (int)$this->config->get('config_store_id') . '.' . $limit, $product_data); } return $product_data; } public function updateViewed($product_id) { $this->db->query("UPDATE " . DB_PREFIX . "product SET viewed = viewed + 1 WHERE product_id = '" . (int)$product_id . "'"); } public function getProductOptions($product_id) { $product_option_data = array(); $product_option_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_option WHERE product_id = '" . (int)$product_id . "' ORDER BY sort_order"); foreach ($product_option_query->rows as $product_option) { $product_option_value_data = array(); $product_option_value_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_option_value WHERE product_option_id = '" . (int)$product_option['product_option_id'] . "' ORDER BY sort_order"); foreach ($product_option_value_query->rows as $product_option_value) { $product_option_value_description_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_option_value_description WHERE product_option_value_id = '" . (int)$product_option_value['product_option_value_id'] . "' AND language_id = '" . (int)$this->config->get('config_language_id') . "'"); $product_option_value_data[] = array( 'product_option_value_id' => $product_option_value['product_option_value_id'], 'name' => $product_option_value_description_query->row['name'], 'price' => $product_option_value['price'], 'prefix' => $product_option_value['prefix'] ); } $product_option_description_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_option_description WHERE product_option_id = '" . (int)$product_option['product_option_id'] . "' AND language_id = '" . (int)$this->config->get('config_language_id') . "'"); $product_option_data[] = array( 'product_option_id' => $product_option['product_option_id'], 'name' => $product_option_description_query->row['name'], 'option_value' => $product_option_value_data, 'sort_order' => $product_option['sort_order'] ); } return $product_option_data; } public function getProductImages($product_id) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_image WHERE product_id = '" . (int)$product_id . "'"); return $query->rows; } public function getProductTags($product_id) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_tags WHERE product_id = '" . (int)$product_id . "' AND language_id = '" . (int)$this->config->get('config_language_id') . "'"); return $query->rows; } public function getProductDiscount($product_id) { if ($this->customer->isLogged()) { $customer_group_id = $this->customer->getCustomerGroupId(); } else { $customer_group_id = $this->config->get('config_customer_group_id'); } $query = $this->db->query("SELECT price FROM " . DB_PREFIX . "product_discount WHERE product_id = '" . (int)$product_id . "' AND customer_group_id = '" . (int)$customer_group_id . "' AND quantity = '1' AND ((date_start = '0000-00-00' OR date_start < NOW()) AND (date_end = '0000-00-00' OR date_end > NOW())) ORDER BY priority ASC, price ASC LIMIT 1"); if ($query->num_rows) { return $query->row['price']; } else { return FALSE; } } public function getProductDiscounts($product_id) { if ($this->customer->isLogged()) { $customer_group_id = $this->customer->getCustomerGroupId(); } else { $customer_group_id = $this->config->get('config_customer_group_id'); } $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_discount WHERE product_id = '" . (int)$product_id . "' AND customer_group_id = '" . (int)$customer_group_id . "' AND quantity > 1 AND ((date_start = '0000-00-00' OR date_start < NOW()) AND (date_end = '0000-00-00' OR date_end > NOW())) ORDER BY quantity ASC, priority ASC, price ASC"); return $query->rows; } public function getProductSpecial($product_id) { if ($this->customer->isLogged()) { $customer_group_id = $this->customer->getCustomerGroupId(); } else { $customer_group_id = $this->config->get('config_customer_group_id'); } $query = $this->db->query("SELECT price FROM " . DB_PREFIX . "product_special WHERE product_id = '" . (int)$product_id . "' AND customer_group_id = '" . (int)$customer_group_id . "' AND ((date_start = '0000-00-00' OR date_start < NOW()) AND (date_end = '0000-00-00' OR date_end > NOW())) ORDER BY priority ASC, price ASC LIMIT 1"); if ($query->num_rows) { return $query->row['price']; } else { return FALSE; } } public function getProductSpecials($sort = 'p.sort_order', $order = 'ASC', $start = 0, $limit = 20) { if ($this->customer->isLogged()) { $customer_group_id = $this->customer->getCustomerGroupId(); } else { $customer_group_id = $this->config->get('config_customer_group_id'); } $sql = "SELECT *, pd.name AS name, p.price, (SELECT ps2.price FROM " . DB_PREFIX . "product_special ps2 WHERE p.product_id = ps2.product_id AND ps2.customer_group_id = '" . (int)$customer_group_id . "' AND ((ps2.date_start = '0000-00-00' OR ps2.date_start < NOW()) AND (ps2.date_end = '0000-00-00' OR ps2.date_end > NOW())) ORDER BY ps2.priority ASC, ps2.price ASC LIMIT 1) AS special, p.image, m.name AS manufacturer, ss.name AS stock, (SELECT AVG(r.rating) FROM " . DB_PREFIX . "review r WHERE p.product_id = r.product_id GROUP BY r.product_id) AS rating FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN " . DB_PREFIX . "product_special ps ON (p.product_id = ps.product_id) LEFT JOIN " . DB_PREFIX . "manufacturer m ON (p.manufacturer_id = m.manufacturer_id) LEFT JOIN " . DB_PREFIX . "stock_status ss ON (p.stock_status_id = ss.stock_status_id) WHERE p.status = '1' AND p.date_available <= NOW() AND pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND ss.language_id = '" . (int)$this->config->get('config_language_id') . "' AND ps.customer_group_id = '" . (int)$customer_group_id . "' AND ((ps.date_start = '0000-00-00' OR ps.date_start < NOW())AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) AND ps.product_id NOT IN (SELECT pd2.product_id FROM " . DB_PREFIX . "product_discount pd2 WHERE p.product_id = pd2.product_id AND pd2.customer_group_id = '" . (int)$customer_group_id . "' AND pd2.quantity = '1' AND ((pd2.date_start = '0000-00-00' OR pd2.date_start < NOW()) AND (pd2.date_end = '0000-00-00' OR pd2.date_end > NOW()))) GROUP BY p.product_id"; $sort_data = array( 'pd.name', 'p.sort_order', 'special', 'rating' ); if (in_array($sort, $sort_data)) { if ($sort == 'pd.name') { $sql .= " ORDER BY LCASE(" . $sort . ")"; } else { $sql .= " ORDER BY " . $sort; } } else { $sql .= " ORDER BY p.sort_order"; } if ($order == 'DESC') { $sql .= " DESC"; } else { $sql .= " ASC"; } if ($start < 0) { $start = 0; } $sql .= " LIMIT " . (int)$start . "," . (int)$limit; $query = $this->db->query($sql); return $query->rows; } public function getTotalProductSpecials() { if ($this->customer->isLogged()) { $customer_group_id = $this->customer->getCustomerGroupId(); } else { $customer_group_id = $this->config->get('config_customer_group_id'); } $query = $this->db->query("SELECT COUNT(DISTINCT ps.product_id) AS total FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN " . DB_PREFIX . "product_special ps ON (p.product_id = ps.product_id) WHERE p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND ((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) AND ps.product_id NOT IN (SELECT pd2.product_id FROM " . DB_PREFIX . "product_discount pd2 WHERE p.product_id = pd2.product_id AND pd2.customer_group_id = '" . (int)$customer_group_id . "' AND pd2.quantity = '1' AND ((pd2.date_start = '0000-00-00' OR pd2.date_start < NOW()) AND (pd2.date_end = '0000-00-00' OR pd2.date_end > NOW())))"); if (isset($query->row['total'])) { return $query->row['total']; } else { return 0; } } public function getProductRelated($product_id) { $product_data = array(); $product_related_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_related WHERE product_id = '" . (int)$product_id . "'"); foreach ($product_related_query->rows as $result) { $product_query = $this->db->query("SELECT DISTINCT *, pd.name AS name, p.image, m.name AS manufacturer, ss.name AS stock, (SELECT AVG(r.rating) FROM " . DB_PREFIX . "review r WHERE p.product_id = r.product_id GROUP BY r.product_id) AS rating FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN " . DB_PREFIX . "manufacturer m ON (p.manufacturer_id = m.manufacturer_id) LEFT JOIN " . DB_PREFIX . "stock_status ss ON (p.stock_status_id = ss.stock_status_id) WHERE p.product_id = '" . (int)$result['related_id'] . "' AND pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND ss.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p.date_available <= NOW() AND p.status = '1'"); if ($product_query->num_rows) { $product_data[$result['related_id']] = $product_query->row; } } return $product_data; } public function getCategories($product_id) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_to_category WHERE product_id = '" . (int)$product_id . "'"); return $query->rows; } } ?>
файл google_sitemap.php
<?php class ControllerFeedGoogleSitemap extends Controller { public function index() { if ($this->config->get('google_sitemap_status')) { $output = '<?xml version="1.0" encoding="UTF-8"?>'; $output .= '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">'; $this->load->model('tool/seo_url'); $this->load->model('catalog/product'); $products = $this->model_catalog_product->getProducts(); foreach ($products as $product) { $output .= '<url>'; $output .= '<loc>' . str_replace('&', '&', $this->model_tool_seo_url->rewrite(HTTP_SERVER . 'index.php?route=product/product&product_id=' . $product['product_id'])) . '</loc>'; $output .= '<changefreq>weekly</changefreq>'; $output .= '<priority>1.0</priority>'; $output .= '</url>'; } $this->load->model('catalog/category'); $categories = $this->model_catalog_category->getCategories(); $output .= $this->getCategories(0); $this->load->model('catalog/manufacturer'); $manufacturers = $this->model_catalog_manufacturer->getManufacturers(); foreach ($manufacturers as $manufacturer) { $output .= '<url>'; $output .= '<loc>' . str_replace('&', '&', $this->model_tool_seo_url->rewrite(HTTP_SERVER . 'index.php?route=product/manufacturer&manufacturer_id=' . $manufacturer['manufacturer_id'])) . '</loc>'; $output .= '<changefreq>weekly</changefreq>'; $output .= '<priority>0.7</priority>'; $output .= '</url>'; $products = $this->model_catalog_product->getProductsByManufacturerId($manufacturer['manufacturer_id'],''); foreach ($products as $product) { $output .= '<url>'; $output .= '<loc>' . str_replace('&', '&', $this->model_tool_seo_url->rewrite(HTTP_SERVER . 'index.php?route=product/product&manufacturer_id=' . $manufacturer['manufacturer_id'] . '&product_id=' . $product['product_id'])) . '</loc>'; $output .= '<changefreq>weekly</changefreq>'; $output .= '<priority>1.0</priority>'; $output .= '</url>'; } } $this->load->model('catalog/information'); $informations = $this->model_catalog_information->getInformations(); foreach ($informations as $information) { $output .= '<url>'; $output .= '<loc>' . str_replace('&', '&', $this->model_tool_seo_url->rewrite(HTTP_SERVER . 'index.php?route=information/information&information_id=' . $information['information_id'])) . '</loc>'; $output .= '<changefreq>weekly</changefreq>'; $output .= '<priority>0.5</priority>'; $output .= '</url>'; } $output .= '</urlset>'; $this->response->addHeader('Content-Type: application/xml'); $this->response->setOutput($output); } } protected function getCategories($parent_id, $current_path = '') { $output = ''; $results = $this->model_catalog_category->getCategories($parent_id); foreach ($results as $result) { if (!$current_path) { $new_path = $result['category_id']; } else { $new_path = $current_path . '_' . $result['category_id']; } $output .= '<url>'; $output .= '<loc>' . str_replace('&', '&', $this->model_tool_seo_url->rewrite(HTTP_SERVER . 'index.php?route=product/category&path=' . $new_path)) . '</loc>'; $output .= '<changefreq>weekly</changefreq>'; $output .= '<priority>0.7</priority>'; $output .= '</url>'; $products = $this->model_catalog_product->getProductsByCategoryId($result['category_id'],''); foreach ($products as $product) { $output .= '<url>'; $output .= '<loc>' . str_replace('&', '&', $this->model_tool_seo_url->rewrite(HTTP_SERVER . 'index.php?route=product/product&path=' . $new_path . '&product_id=' . $product['product_id'])) . '</loc>'; $output .= '<changefreq>weekly</changefreq>'; $output .= '<priority>1.0</priority>'; $output .= '</url>'; } $output .= $this->getCategories($result['category_id'], $new_path); } return $output; } } ?>
Ссылка на сайтмеп:
Гугл ничего не показал, может вы поможете.
-
Спустя немного времени снова вернулся к этому вопросу.
В общем если вы удалили ненужные страны из бд, но на странице заказа они еще отображаются, то просто удалите файл cache.country.1298470855 (могут быть любые цифры) из /system/cache
-
Сабж. Допустим я торгую чем-то нескончаемым, есть ли способ игнорировать строку "количество"?
-
А не объясните как создавать новую "колонку" для модуля? Так можно будет создавать неограниченное количество колонок и вставлять их вместе с модулями в любую часть сайта.
-
ну редирект в роботс это что то мистическое или я чего то незнаю, да и поисковикам хорошо когда видит ссылку заходит и оказывается на той ссылке на которую он зашел, а не на той на которую редиректнуло.
ну почти в каждом контроллере есть строчка для "хлебных крошек" типа
'href' => HTTP_SERVER . 'index.php?route=common/home',
, где. 'index.php?route=common/home'
можно удалить, да и так в пару файлах в менюшках, в лого прописано.ну а остальные страницы типа account\account, product\search и другие странички не предназначенные для индексирования поиском, просто закройте в robots.txt, как собственно уже и сделали.
У меня какая-то страннота вышла. На локальном сервере эта фича прокатила, залил переписанные файлы на хостиг, а там index.php?route=common/home в строке адреса все равно остались.
UPD
Спустя 5 минут начало работать.
-
а с чего вы взяли что там вообще OpenCart?
Может и не опенкарт, хотя все элементы похожи на опенкартовские, хоть и модифицированные. В любом случае должны быть еще способы скрыть прямой доступ к станице авторизации.
Поделитесь идеями.
-
-
А есть еще идеи? Разве у http://timeshop.com.ua/admin админка заблокирована по ip? Или там как-то изменен адрес админки?
-
Готово! Благодарю за подсказку. Сначала правда выбивало
Fatal error: Class 'Controllercommonheadermnt' not found in W:\home\testcart.local\www\system\engine\controller.php on line 42
Оказалось в header_mnt.php вместо
class ControllerCommonHeader_mnt extends Controller
надо было писать без слеша
class ControllerCommonHeadermnt extends Controller
Годно вышло: http://rghost.ru/4451315/image.png
-
Задался вопросом, как скрыть от неугодных доступ к www.mysite/admin ? Хочу выдавать им 404. По примеру http://timeshop.com.ua/admin
Как такое реализуют? Поделитесь опытом.
-
Конвертни его в utf8 без BOM.
-
Предположим для некоторых частей сайта мне необходим альтернативный header. Например я не хочу чтобы в maintenance отображался header с менюшкой, а только логотип.
<?php echo $header; ?> <div id="content"><?php echo $message; ?></div> <?php echo $footer; ?>
Удалять первую строчку - не дело, т.к от нее зависит стиль оформление footer. Следовательно стоит сделать альтернативный header.
Я дублирую catalog\controller\common\header.php и catalog\view\theme\default\template\common\header.tpl
Затем переименовываю их в header_mnt.php и header_mnt.tpl, прописываю <?php echo $header_mnt; ?> в maintenance.
После этого редактирую header_mnt.tpl убрав менюшку, а в header_mnt.php заменяю все строки содержащие header на header_mnt.
Естественно все это не работает, php echo не находит никаких $header_mnt. Как заставить все это работать?
-
Что-то не могу разобраться с CSS, таблица реагирует только на изменение дефолтных строк. Не смог например прописать различные цвета для ссылок в заголовках категорий и ссылок на товары. Например чтобы ссылки на товары всегда были синего цвета, а заголовки категорий и подкатегорий белого.
-
Пробовал, все равно оставались в списке. Хотя надо будет еще разок попробовать. Может просто в кэше остались.
-
Сабж. В бд в разделе country и zone по отключал все кроме Украины. Но в форме заказа выпадающий список все равно их отображает. С регионами правда все нормально, отображаются только украинские.
-
Да нет, моих отсутствующих знаний на такое не хватит. прийдется обращаться к знающим людям
Я нашел то, что нам нужно. Все отлично работает. https://opencartforum.com/topic/928-%d0%bc%d0%be%d0%b4%d1%83%d0%bb%d1%8c-%d1%81%d0%ba%d0%b8%d0%b4%d0%be%d0%ba/page__view__findpost__p__5946
-
Evan, тебе удалось что-то сделать? Я бы тоже не отказался от скидок.
-
Собственно хотелось бы вставить модуль фильтра около выпадающего списка сортировщика на странице товаров. Есть ли способы вставить определенный модуль в подобное место. У меня получалось туда вставлять саму колонку с модулем, но такой вариант меня не устраивает т.к. в ней уже есть корзина.
-
Установил, работает. Чистый опенкарт + модуль и бд без префиксов, как в посте выше. Затем залил это все своим основным опенкартом, но админку не менял.
Теперь попробую добавить "или"
-
Добавил значения в фильтр, но при редактировании товара в опции фильтра ничего не отображается, только "Сначала необходимо выбрать категории товара", хотя необходимая категория выбрана.
Подскажите где ближе всего искать проблему?
Кхм, а не может ли кто-то выложить чистый опенкарт + установленной модуль? Ато все как-то так разбросано, не разобраться.
-
При обновлении корзины с минимальной суммой, например увеличив количество товаров всплывает следующая ошибка: Warning: Cannot modify header information - headers already sent by (output started at W:\home\opencart.local\www\catalog\controller\checkout\cart.php:1) in W:\home\opencart.local\www\system\engine\controller.php on line 27
Как бороться?
UPD
Починено.
Похоже все дело было в кодировке.
[Хочу][SEO] Приставка к тайтлам для всех страниц
в Модули и дополнения
Опубликовано:
Сабж.
Если ли модуль, который припишет к тайтлам всех страниц какую-то статичную приставку?
Пример:
Приставка - Бижутерия, заколки, крабы, обручи оптом в Харькове