Перейти к содержанию
uorypm

Кэш. Class Cache. Проблема с генерацией непонятной строки

Рекомендуемые сообщения

Здравствуйте, форумчане!

 

Есть файл контроллера, в котором запрашивается кэш:

$product_data = $this->cache->get('product.total.' . (int)$this->config->get('config_language_id') . '.' . (int)$this->config->get('config_store_id') . '.' . (int)$customer_group_id . '.' . $cache);

Есть системный класс Cache, в котором есть метод get.

 

 

Проблема в том, что из файла контроллера запрашивается строка вида "product.total.1.0.1.$cache" (где $cache - это некая сгенерированная строка). А в метод get класса Cache приходит непонятно почему такая строка: "product.total.1.0.1.cfcd208495d565ef66e7dff9f98764da.$cache".

 

Ссылка $this в файле контроллера ссылается на объект $registry класса Registry, в нем зарегистрирован экземпляр класса Cache. Т.е. вроде бы все нормально.

 

При этом метод set класса Cache записывает кэш как и положено - в виде файла с именем "product.total.1.0.1.$cache". Т.е. сейчас кэш для файлов "product.total.1.0.1.*" вообще не используется и CMS постоянно обращается к БД.

 

Временно метод get класса Cache изменил так:

	public function get($key) {
		if(preg_match('/^product\.total\.1\.0\.1\.cfcd208495d565ef66e7dff9f98764da.*$/', $key))
		{
			$key = str_replace('cfcd208495d565ef66e7dff9f98764da.', '', $key);
		}

	// ...

	}

Кто-нибудь с таким сталкивался и откуда и почему вставляетяс строка "cfcd208495d565ef66e7dff9f98764da" в имя файла кэша?

 

Спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
$cache = '1.0.1.cfcd208495d565ef66e7dff9f98764da' ;

Все правильно работает.

1. Напишите полный код класса Cache под спойлером.

2. И код контроллера, который запрашивает данные из кэша.

3. Как определили, что кэш не используется?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1. Код класса Cache

<?php
class Cache { 
	private $expire = 3600; 

	public function get($key) {
		if(preg_match('/^product\.total\.1\.0\.1\.cfcd208495d565ef66e7dff9f98764da.*$/', $key))
		{
			$key = str_replace('cfcd208495d565ef66e7dff9f98764da.', '', $key);
			//echo $key , "<br/>\r\n";
		}
		$files = glob(DIR_CACHE . 'cache.' . preg_replace('/[^A-Z0-9\._-]/i', '', $key) . '.*');
		
		if ($files) {
			$cache = file_get_contents($files[0]);
			
			$data = unserialize($cache);
			
			foreach ($files as $file) {
				$time = substr(strrchr($file, '.'), 1);

      			if ($time < time()) {
					if (file_exists($file)) {
						unlink($file);
					}
      			}
    		}
			
			return $data;			
		}
	}

  	public function set($key, $value) {
    	$this->delete($key);
		
		$file = DIR_CACHE . 'cache.' . preg_replace('/[^A-Z0-9\._-]/i', '', $key) . '.' . (time() + $this->expire);
    	
		$handle = fopen($file, 'w');

    	fwrite($handle, serialize($value));
		
    	fclose($handle);
  	}
	
  	public function delete($key) {
		$files = glob(DIR_CACHE . 'cache.' . preg_replace('/[^A-Z0-9\._-]/i', '', $key) . '.*');
		
		if ($files) {
    		foreach ($files as $file) {
      			if (file_exists($file)) {
					unlink($file);
				}
    		}
		}
  	}
}
?>

 

2. Модель, не контроллер. Вот код метода:

<?php
	public function getTotalProducts($data = array()) {
		if ($this->customer->isLogged()) {
			$customer_group_id = $this->customer->getCustomerGroupId();
		} else {
			$customer_group_id = $this->config->get('config_customer_group_id');
		}	
				
		$cache = md5(http_build_query($data));
		
		$product_data = $this->cache->get('product.total.' . (int)$this->config->get('config_language_id') . '.' . (int)$this->config->get('config_store_id') . '.' . (int)$customer_group_id . '.' . $cache);
		
		if (!$product_data and $product_data === NULL) {
			
			$sql = "SELECT COUNT(DISTINCT p.product_id) 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)";
	
			if (!empty($data['filter_category_id'])) {
				$sql .= " LEFT JOIN " . DB_PREFIX . "product_to_category p2c ON (p.product_id = p2c.product_id)";			
			}
						
			$sql .= " WHERE pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "'";
			
			if (!empty($data['filter_name']) || !empty($data['filter_tag'])) {
				$sql .= " AND (";
				
				if (!empty($data['filter_name'])) {					
					if (!empty($data['filter_description'])) {
						$sql .= "LCASE(pd.name) LIKE '%" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "%' OR MATCH(pd.description) AGAINST('" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "')";
					} else {
						$sql .= "LCASE(pd.name) LIKE '%" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "%'";
					}
				}
				
				if (!empty($data['filter_name']) && !empty($data['filter_tag'])) {
					$sql .= " OR ";
				}
				
				if (!empty($data['filter_tag'])) {
					$sql .= "MATCH(pd.tag) AGAINST('" . $this->db->escape(utf8_strtolower($data['filter_tag'])) . "')";
				}
			
				$sql .= ")";
				
				if (!empty($data['filter_name'])) {
					$sql .= " OR LCASE(p.model) = '" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "'";
				}
				
				if (!empty($data['filter_name'])) {
					$sql .= " OR LCASE(p.sku) = '" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "'";
				}	
				
				if (!empty($data['filter_name'])) {
					$sql .= " OR LCASE(p.upc) = '" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "'";
				}		

				if (!empty($data['filter_name'])) {
					$sql .= " OR LCASE(p.ean) = '" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "'";
				}

				if (!empty($data['filter_name'])) {
					$sql .= " OR LCASE(p.jan) = '" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "'";
				}
				
				if (!empty($data['filter_name'])) {
					$sql .= " OR LCASE(p.isbn) = '" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "'";
				}		
				
				if (!empty($data['filter_name'])) {
					$sql .= " OR LCASE(p.mpn) = '" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "'";
				}				
			}
						
			if (!empty($data['filter_category_id'])) {
				if (!empty($data['filter_sub_category'])) {
					$implode_data = array();
					
					$implode_data[] = (int)$data['filter_category_id'];
					
					$this->load->model('catalog/category');
					
					$categories = $this->model_catalog_category->getCategoriesByParentId($data['filter_category_id']);
										
					foreach ($categories as $category_id) {
						$implode_data[] = (int)$category_id;
					}
								
					$sql .= " AND p2c.category_id IN (" . implode(', ', $implode_data) . ")";			
				} else {
					$sql .= " AND p2c.category_id = '" . (int)$data['filter_category_id'] . "'";
				}
			}		
			
			if (!empty($data['filter_manufacturer_id'])) {
				$sql .= " AND p.manufacturer_id = '" . (int)$data['filter_manufacturer_id'] . "'";
			}
			
			$query = $this->db->query($sql);
			
			$product_data = $query->row['total']; 
			
			$this->cache->set('product.total.' . (int)$this->config->get('config_language_id') . '.' . (int)$this->config->get('config_store_id') . '.' . (int)$customer_group_id . '.' . $cache, $product_data);
		}
		
		return $product_data;
	}

 

3. Изначальная причина была в том, что сайт работал медленно. Системный администратор, потом и я, проверил нагрузку на сервер - нагрузка на сервер действительно была очень большой (не такой, какой должна была быть при работе с кэшем). Была поставлена мне задача. Посмотрел папку с кэшем - кэш создается под одним именем, а запрашивается под другим (в следствие чего создается новый запрос к БД и сайт работает медленно, а сервер под нагрузкой).

 

---------------------------

 

Откуда инфа, что $cache = '1.0.1.cfcd208495d565ef66e7dff9f98764da' ? Эта переменная вообще по-другому формируется.

 

В модели выводил на экран передаваемый текст - был один вариант (собственно, под каким и сохранялся кэш), а в метод класса приходит уже другой (а кэша с таким именем уже нет)!

При том такой запрос кэша формируется только в этом методе и только в этой модели! Т.е. только для кэшей которые начинаются с product.total.1.0.1.*.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да, ошибся:

$cache = md5(http_build_query($data)); //cfcd208495d565ef66e7dff9f98764da

Значит имя файла кэша cache.product.total.1.0.1.cfcd208495d565ef66e7dff9f98764da.$UTC. 

if (!$product_data and $product_data === NULL) {
//замените на 
if (empty($product_data)) {

Пришлите в ЛС данные для доступа к магазину или сорцы с БД на talgatks@gmail.com, я посмотрю. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Пришлите в ЛС данные для доступа к магазину или сорцы с БД на talgatks@gmail.com, я посмотрю. 

 

К сожалению, это невозможно.

 

debug_backtrace'ом выяснил, что среди прочих вызывается файл "/vqmod/vqcache/vq2-catalog_model_catalog_product.php" и в нем вызывается тот самый метод класса, но строка к кэшу формируется уже по-другому:

// Start filter change
	    $product_data = $this->cache->get('product.total.' . (int)$this->config->get('config_language_id') . '.' . (int)$this->config->get('config_store_id') . '.' . (int)$customer_group_id . '.'.md5($filter). '.'. $cache); 
// End filter

Сравните с исходным запросом:

$product_data = $this->cache->get('product.total.' . (int)$this->config->get('config_language_id') . '.' . (int)$this->config->get('config_store_id') . '.' . (int)$customer_group_id . '.' . $cache);

 

Т.е. как раз тут и вставляется эта злополучная строка прямо посреди текста - " .md5($filter). ".

 

С vQmod никогда не работал. Как наиболее правильно исправить такую работу этого мода? Или ничего страшного, ели вмешаться в код напрямую?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Проблема в файле скрипта vQmod '/vqmod/xml/vqmod_filter_products.xml' :

 

	<operation>
            <search position="replace"><![CDATA[
            $product_data = $this->cache->get('product.total.' . (int)$this->config->get('config_language_id') . '.' . (int)$this->config->get('config_store_id') . '.' . (int)$customer_group_id . '.' . $cache);
            ]]></search>
            <add><![CDATA[
// Start filter change
	    $product_data = $this->cache->get('product.total.' . (int)$this->config->get('config_language_id') . '.' . (int)$this->config->get('config_store_id') . '.' . (int)$customer_group_id . '.'.md5($filter). '.'. $cache); 
// End filter
            ]]></add>
        </operation>

 

Переменная $filter всегда имеет значение int(0), следовательно, md5(0) имеем - "cfcd208495d565ef66e7dff9f98764da".

 

Следует просто переписать замещающий код? Из знающих vQmod никто не подскажет? Нужна ли вообще переменная $filter и в каких случаях?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Проблема в файле скрипта vQmod '/vqmod/xml/vqmod_filter_products.xml' :

 

	<operation>
            <search position="replace"><![CDATA[
            $product_data = $this->cache->get('product.total.' . (int)$this->config->get('config_language_id') . '.' . (int)$this->config->get('config_store_id') . '.' . (int)$customer_group_id . '.' . $cache);
            ]]></search>
            <add><![CDATA[
// Start filter change
	    $product_data = $this->cache->get('product.total.' . (int)$this->config->get('config_language_id') . '.' . (int)$this->config->get('config_store_id') . '.' . (int)$customer_group_id . '.'.md5($filter). '.'. $cache); 
// End filter
            ]]></add>
        </operation>

 

Переменная $filter всегда имеет значение int(0), следовательно, md5(0) имеем - "cfcd208495d565ef66e7dff9f98764da".

 

Следует просто переписать замещающий код? Из знающих vQmod никто не подскажет? Нужна ли вообще переменная $filter и в каких случаях?

 

Это XML файл какого-то модуля фильтра, если этот фильтр не используется на сайте, то можете просто переименовать vqmod_filter_products.xml на vqmod_filter_products.xml.bak, при обновлении страницы vqmod его не обработает и файл /vqmod/vqcache/vq2-catalog_model_catalog_product.php примет прежний вид. 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Похожий контент

    • От vseputen
      750.00 руб
      Скачать/Купить дополнение


      АКЦИЯ!!! Парсер ru.Aliexpress.com для Opencart 2.0, 2.1, 3.*
      Отдельный простой парсер сайта ru.Aliexpress.com для Opencart 2.0*
      Парсер умеет:
      1. Брать название.
      2. Брать описание с картинками.
      3. Брать картинки (как основное фото так и дополнительные).
      4. Можно выбирать какую категорию брать, и куда загружать.
      5. Работает быстро при этом Aliexpress не банит по ip.
      6. Можно менять процентную накрутку для каждой категории.
      7. Можно выбирать с какой по какую страницы парсить.
      8. Парсер берет возможность выбора цвета, модификации и т.д
      Тестировался на Opencart 2.0.3.1
      Подойдет для Opencart 2.0*
      Версия для OpenCart 1.5x тут https://opencartforum.com/files/file/2741-%D0%BF%D0%B0%D1%80%D1%81%D0%B5%D1%80-rualiexpresscom-%D0%B4%D0%BB%D1%8F-opencart-15/
      ЕСЛИ НУЖНА ВЕРСИЯ ПАРСЕРА ДЛЯ OpenCart 2.1x ПИШИТЕ В ЛИЧКУ!
      НЕ ЗАБЫВАЙТЕ СТАВИТЬ ГОЛОСА ЕСЛИ ПОНРАВИЛАСЬ РАБОТА ПАРСЕРА...
      Установка:
      1. Скопировать содержимое архива в корень сайта.
      2. Перейти по ссылке вида site.ru/parser (site.ru заменить на свой сайт).
      3. Пользоваться!
      Ниже фото как работать с парсером:

      Добавил vseputen Добавлено 03.10.2015 Категория Парсеры Системные требования Сайт разработчика Старая цена 1750 Метод активации Без активации Ioncube Loader Нет OpenCart 3.0
      2.1
      2.0 ocStore 3.0
      2.3
      2.1 OpenCart.Pro, ocShop  
    • От vseputen
      Отдельный простой парсер сайта ru.Aliexpress.com для Opencart 2.0*
      Парсер умеет:
      1. Брать название.
      2. Брать описание с картинками.
      3. Брать картинки (как основное фото так и дополнительные).
      4. Можно выбирать какую категорию брать, и куда загружать.
      5. Работает быстро при этом Aliexpress не банит по ip.
      6. Можно менять процентную накрутку для каждой категории.
      7. Можно выбирать с какой по какую страницы парсить.
      8. Парсер берет возможность выбора цвета, модификации и т.д
      Тестировался на Opencart 2.0.3.1
      Подойдет для Opencart 2.0*
      Версия для OpenCart 1.5x тут https://opencartforum.com/files/file/2741-%D0%BF%D0%B0%D1%80%D1%81%D0%B5%D1%80-rualiexpresscom-%D0%B4%D0%BB%D1%8F-opencart-15/
      ЕСЛИ НУЖНА ВЕРСИЯ ПАРСЕРА ДЛЯ OpenCart 2.1x ПИШИТЕ В ЛИЧКУ!
      НЕ ЗАБЫВАЙТЕ СТАВИТЬ ГОЛОСА ЕСЛИ ПОНРАВИЛАСЬ РАБОТА ПАРСЕРА...
      Установка:
      1. Скопировать содержимое архива в корень сайта.
      2. Перейти по ссылке вида site.ru/parser (site.ru заменить на свой сайт).
      3. Пользоваться!
      Ниже фото как работать с парсером:

    • От optimlab
      Скачать/Купить дополнение


      OptimBlog
      OptimBlog – блог для Opencart 3
      Описание
      Данный модуль позволяет создать бесконечное множество статей и категорий для них. Например вы можете создавать категории «Новости», «Статьи», «Акции», а также создать полноценный блог для своего магазина с разбитием материалов по категориям.
      Концепция и отличие от других блогов для Опенкарт 3.
      Другие блоги для Opencart 3
      Большинство (как бы не 100%, аналогов не видел) модулей блогов и других аналогичных используют концепцию клонирования программного кода(контроллеров и сопутствующих файлов - Model-View-Controller) категорий товаров и самих товаров, превращая скрипты:
      «категорию товаров» → «категорию статей»
      «товар» → «статья»
      клонирование таблиц Базы Данных аналогично категориям и товарам.
      Такой подход вызывает много конфликтов. Например наименования таблиц при смене одного модуля на другой совпадали, а неопытные пользователи недоумевали от полученных ошибок и не понимали причины. Ошибок и несостыковок на практике было более чем достаточно. Описывать их все тут не имеет смысла..
      OptimBlog – концепция и основная идея
      Категории присваивается тип — Товар/Статья.
      Функционал Статьи расширяется аналогично функционалу Товара.
      Отзывы аналогично категориям разделены на 2 типа — Товар/Статья.
      А также добавлена возможность вывода «Ответа магазина» на «Отзыв» с использованием HTML.
      Данный модуль блога не заменяет родных файлов Opencart 3.
      Сохранена концепция Опенкарт в названиях и определениях, а также сохранён привычный для администратора магазина внешний вид интерфейса.
      Нет конфликтов по SEO URL, так как используется штатный функционал Opencart. Который вы можете расширить приложенными модификаторами.
      Модуль на 90% состоит из файлов модификаторов, которые можно удалить или отключить в любое время.
       
      Функционал и возможности модуля OptimBlog
      Общие для категорий, товаров и статей:
      Заголовок H1
      Краткое описание -
      Выводится в категории и в модулях выводящих товары или статьи. Модификатор для товарных модулей отсутствует.
      Общие для товаров и статей:
      Главная категория -
      Используется для определения хлебных крошек в «URL от базового домена» находящихся в индексе Поисковых Систем. А так же правильной настройки свойства canonical для страниц сайта.
      Рекомендуемые товары и статьи -
      Нет добавления страницы саму на себя.
      Рекомендовать можно в трёх направлениях: двойное, или в одну из сторон.
      Статьи:
      Теги
      Начало и конец публикации
      Автор
      Атрибуты
      Изображения
      Возможности для разработчиков:
      Заложены на будущее некоторые функции и возможности, которые разработчики могут использовать для создания своих модулей. Например: «дополнительные изображения» в настройках категории, можно выводить с помощью слайдера. А «Производителя» использовать для соответствующих привязок и сортировок.
      Модули разработчиков связанные с выводом товаров, можно легко переопределить для Статей. Так как php-код контролеров и моделей практически зеркальный.
      Использовалась верстка с классами Bootstrap 3. Что можно легко использовать для своих шаблонов без лишних заморочек и потерей времени.
       
      Установка OptimBlog
      Установить installer.ocmod.zip.
      Обновить кэш модификаторов.
      Установить optimblog-admin.ocmod.zip.
      Установить optimblog-category.ocmod.zip.
      Установить optimblog-category-theme-default.ocmod.zip или optimblog-category-theme-all.ocmod.zip.
      Установить optimblog-seo_url.ocmod.zip .
      Удалить или отключить модификатор installer.ocmod.zip.
      Обновить кэш модификаторов.
      Зайти в «Группы пользователей» и назначить соответствующие права доступа.
      В выпадающем списке раздела «Модули / Расширения» выберите «Статьи».
      Активируйте модуль OptimBlog для своего магазина (модуль мультимагазинный, аналогично модулей Темы).
      Редактируйте настройки модуля OptimBlog и сохраните.
       
       
       
      Состав модулей и модификаторов семейства OptimCart
      optimblog-admin.ocmod.zip — отвечает за административную часть.
      optimblog-category.ocmod.zip — отвечает за пользовательскую часть.
      optimblog-category-theme-default.ocmod.zip — отвечает за пользовательскую часть шаблона «Стандартная тема». (Для создания модификатора для своего шаблона скопируйте, разархивируйте и отредактируйте данный файл под свой шаблон заменив путь к шаблону в коде модификатора или установите вместо этого optimblog-category-theme-all.ocmod.zip модифицирующий все шаблоны.)
      optimblog-seo_url.ocmod.zip — вносит необходимую правку в catalog/controller/startup/seo_url.php.
      installer.ocmod.zip — вносит разрешения в часть кода, для установки модуля(контроллера) поиска по статьям, находящегося в составе optimblog-category.ocmod.zip.
      breadcrumb-last.ocmod.zip — модификатор убирающий кликабельность последнего пункта хлебных крошек.
      canonical-category.ocmod.zip — модификатор добавляющий материнские категории в канонический URL подкатегории. Продолжение предыдущей версии модификатора: Канонические страницы категорий в Opencart 2.0.x.x - 2.3.x.x (Canonical URL)
      canonical-category-no-page.ocmod.zip — модификатор аналогичный предыдущему, только убирающий канонический URL на страницах листинга(page=n).
      canonical-information.ocmod.zip — модификатор аналогичный canonical-category.ocmod.zip, добавляющий подкатегории в канонический URL статьи, при наличии главной категории в её настройках.
      optimblog-module-bestseller-information.ocmod.zip — модуль «Лучшие статьи».
      optimblog-module-featured-information.ocmod.zip — модуль «Рекомендуемые статьи».
      optimblog-module-latest-information.ocmod.zip — модуль «Новые статьи».
      optimblog-module-category-information.ocmod.zip — модуль «Категории статей».
      optimblog-module-search-information.ocmod.zip - модуль «Поиск статей».
       
       
       
      Информация:
      Демо: http://demo.optimcart.com
      Админка: http://demo.optimcart.com/admin
       
      GitHub: https://github.com/optimlab/optimblog

      Лицензия: GNU General Public License version 3 (GPLv3)
      Добавил optimlab Добавлено 14.06.2018 Категория Блоги, новости, статьи Системные требования Сайт разработчика http://optimlab.ru Старая цена Метод активации Без активации Ioncube Loader Нет OpenCart 3.0 ocStore Несовместим OpenCart.Pro, ocShop  
    • От optimlab
      OptimBlog – блог для Opencart 3
      Описание
      Данный модуль позволяет создать бесконечное множество статей и категорий для них. Например вы можете создавать категории «Новости», «Статьи», «Акции», а также создать полноценный блог для своего магазина с разбитием материалов по категориям.
      Концепция и отличие от других блогов для Опенкарт 3.
      Другие блоги для Opencart 3
      Большинство (как бы не 100%, аналогов не видел) модулей блогов и других аналогичных используют концепцию клонирования программного кода(контроллеров и сопутствующих файлов - Model-View-Controller) категорий товаров и самих товаров, превращая скрипты:
      «категорию товаров» → «категорию статей»
      «товар» → «статья»
      клонирование таблиц Базы Данных аналогично категориям и товарам.
      Такой подход вызывает много конфликтов. Например наименования таблиц при смене одного модуля на другой совпадали, а неопытные пользователи недоумевали от полученных ошибок и не понимали причины. Ошибок и несостыковок на практике было более чем достаточно. Описывать их все тут не имеет смысла..
      OptimBlog – концепция и основная идея
      Категории присваивается тип — Товар/Статья.
      Функционал Статьи расширяется аналогично функционалу Товара.
      Отзывы аналогично категориям разделены на 2 типа — Товар/Статья.
      А также добавлена возможность вывода «Ответа магазина» на «Отзыв» с использованием HTML.
      Данный модуль блога не заменяет родных файлов Opencart 3.
      Сохранена концепция Опенкарт в названиях и определениях, а также сохранён привычный для администратора магазина внешний вид интерфейса.
      Нет конфликтов по SEO URL, так как используется штатный функционал Opencart. Который вы можете расширить приложенными модификаторами.
      Модуль на 90% состоит из файлов модификаторов, которые можно удалить или отключить в любое время.
       
      Функционал и возможности модуля OptimBlog
      Общие для категорий, товаров и статей:
      Заголовок H1
      Краткое описание -
      Выводится в категории и в модулях выводящих товары или статьи. Модификатор для товарных модулей отсутствует.
      Общие для товаров и статей:
      Главная категория -
      Используется для определения хлебных крошек в «URL от базового домена» находящихся в индексе Поисковых Систем. А так же правильной настройки свойства canonical для страниц сайта.
      Рекомендуемые товары и статьи -
      Нет добавления страницы саму на себя.
      Рекомендовать можно в трёх направлениях: двойное, или в одну из сторон.
      Статьи:
      Теги
      Начало и конец публикации
      Автор
      Атрибуты
      Изображения
      Возможности для разработчиков:
      Заложены на будущее некоторые функции и возможности, которые разработчики могут использовать для создания своих модулей. Например: «дополнительные изображения» в настройках категории, можно выводить с помощью слайдера. А «Производителя» использовать для соответствующих привязок и сортировок.
      Модули разработчиков связанные с выводом товаров, можно легко переопределить для Статей. Так как php-код контролеров и моделей практически зеркальный.
      Использовалась верстка с классами Bootstrap 3. Что можно легко использовать для своих шаблонов без лишних заморочек и потерей времени.
       
      Установка OptimBlog
      Установить installer.ocmod.zip.
      Обновить кэш модификаторов.
      Установить optimblog-admin.ocmod.zip.
      Установить optimblog-category.ocmod.zip.
      Установить optimblog-category-theme-default.ocmod.zip или optimblog-category-theme-all.ocmod.zip.
      Установить optimblog-seo_url.ocmod.zip .
      Удалить или отключить модификатор installer.ocmod.zip.
      Обновить кэш модификаторов.
      Зайти в «Группы пользователей» и назначить соответствующие права доступа.
      В выпадающем списке раздела «Модули / Расширения» выберите «Статьи».
      Активируйте модуль OptimBlog для своего магазина (модуль мультимагазинный, аналогично модулей Темы).
      Редактируйте настройки модуля OptimBlog и сохраните.
       
       
       
      Состав модулей и модификаторов семейства OptimCart
      optimblog-admin.ocmod.zip — отвечает за административную часть.
      optimblog-category.ocmod.zip — отвечает за пользовательскую часть.
      optimblog-category-theme-default.ocmod.zip — отвечает за пользовательскую часть шаблона «Стандартная тема». (Для создания модификатора для своего шаблона скопируйте, разархивируйте и отредактируйте данный файл под свой шаблон заменив путь к шаблону в коде модификатора или установите вместо этого optimblog-category-theme-all.ocmod.zip модифицирующий все шаблоны.)
      optimblog-seo_url.ocmod.zip — вносит необходимую правку в catalog/controller/startup/seo_url.php.
      installer.ocmod.zip — вносит разрешения в часть кода, для установки модуля(контроллера) поиска по статьям, находящегося в составе optimblog-category.ocmod.zip.
      breadcrumb-last.ocmod.zip — модификатор убирающий кликабельность последнего пункта хлебных крошек.
      canonical-category.ocmod.zip — модификатор добавляющий материнские категории в канонический URL подкатегории. Продолжение предыдущей версии модификатора: Канонические страницы категорий в Opencart 2.0.x.x - 2.3.x.x (Canonical URL)
      canonical-category-no-page.ocmod.zip — модификатор аналогичный предыдущему, только убирающий канонический URL на страницах листинга(page=n).
      canonical-information.ocmod.zip — модификатор аналогичный canonical-category.ocmod.zip, добавляющий подкатегории в канонический URL статьи, при наличии главной категории в её настройках.
      optimblog-module-bestseller-information.ocmod.zip — модуль «Лучшие статьи».
      optimblog-module-featured-information.ocmod.zip — модуль «Рекомендуемые статьи».
      optimblog-module-latest-information.ocmod.zip — модуль «Новые статьи».
      optimblog-module-category-information.ocmod.zip — модуль «Категории статей».
      optimblog-module-search-information.ocmod.zip - модуль «Поиск статей».
       
       
       
      Информация:
      Демо: http://demo.optimcart.com
      Админка: http://demo.optimcart.com/admin
       
      GitHub: https://github.com/optimlab/optimblog

      Лицензия: GNU General Public License version 3 (GPLv3)
    • От Aky
      Как передать POST параметр через ajax в файл controller модуля OpenCart ?
       
      Есть модуль "latest"  Файл контроллера latest.php, нужно передать туда параметр width через Ajax/Jquery  
       
      Как обратится к этому файлу? 
       
      Как работать с Ajax знаю, как параметры передать знаю, как принять знаю, но как обратится к нужному файлу в OpenCart?
       
      При попытках обращения по "url:' скрипт выдает ошибку  "404 (not found)"
       
      Пробовал вот так:
      url: 'index.php?route=extension/module/latest',  url: 'index.php?route=module/latest',  url: '/catalog/controller/extension/module/latest',   
      Если перейти на прямую по ссылки: "/catalog/controller/extension/module/latest.php"  выдает ошибку HTTP ERROR 500
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.