Jump to content

Override Controllers - Не Срабатывают Изменения


Recommended Posts

Привет!

 

Появилась необходимость добавить дополнительные скрипты на главной странице. Создал IndexController.php в override/controllers/

 

<?php

class IndexController extends IndexControllerCore
{
public function setMedia()
{
	global $cookie;
	Tools::addCSS(__PS_BASE_URI__.'components/css/bootstrap.min.css', 'all');
	Tools::addCSS(__PS_BASE_URI__.'components/css/font-awesome.css', 'all');
	Tools::addCSS(_THEME_CSS_DIR_.'global.css', 'all');
	if(Configuration::get('PL_JQUERY')==1)
		Tools::addJS('http'.($this->ssl?'s':'').'://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js');
	elseif(Configuration::get('PL_JQUERY')==2)
		Tools::addJS('http'.($this->ssl?'s':'').'://yandex.st/jquery/1.7.2/jquery.min.js');
	else
		Tools::addJS(_PS_JS_DIR_.'jquery/jquery.min.js');
	Tools::addJS(array(_PS_JS_DIR_.'jquery/jquery.easing.1.3.js', _PS_JS_DIR_.'tools.js'));
	Tools::addJS(_PS_JS_DIR_.'jquery.bxSlider.mnky.min.js');
	$language = new Language($cookie->id_lang);
	if ($language->is_rtl)
		Tools::addCSS(_THEME_CSS_DIR_.'rtl.css');
}
}

 

При загрузке главной страницы изменения, связанные с

 

Tools::addJS(_PS_JS_DIR_.'jquery.bxSlider.mnky.min.js');

 

игнорируются, а остальные нет.

 

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

 

Может ктонибудь сталкивался с такого рода проблемами и уже решал их? Помогите разобраться, что же тут происходит

 

Есть один способ - замена кода в оригинальных файлах, но это не то..

Link to comment
Share on other sites

в настройках системы убери кеширование и все заработает.

у меня проблема наподобе

 

 

Здравствуйте.

 

у меня 2 вопроса.

 

1 вопрос:

Читал в официальном документе, что можно переопределить методы класса поместив файл по одному из путей:

/override/controllers/front/ProductController.php

/modules/my_module/override/controllers/front/ProductController.php

 

Я создал модуль, который отлично работает, но мне надо полностью видоизменить Manufacturer. Весь его вывод. если же я помещаю свои переопределенные методы в

/override/controllers/front/Manufacturer.php то все работает если же в/modules/my_module/override/controllers/front/Manufacturer.php, то загружается стандартная страница. Почему? файлы идентичны.

Я хочу создать нормальный модуль для своих нужд - для использования его в своих дальнейших магазинах. как мне сделать так, чтобы можно было установить и удалить его потом, с возможностью безопасного обновления магазина.

 

2 вопрос:

Я создал модуль отображающий нужные мне категории на главной странице, но я хочу поменять линки, чтобы при нажатии на них можно было посмотреть какие производители принадлежат данной группе. тоетсь скажем у производителя а имеются товары в категории телевизоры, как передать какой-от параметр ил ичто-то. Я уже пробовал переопределять метод getCategoryLink в классе LINK, но что-то я где-то не доделываю...

подскажите в каком направлении копать. Мне очень понравилась система Presta, хочу ее оптимизировать под свои нужды. МОгу позже как доделаю поделиться модулями..

Спасибо

 

 

prestashop 1.5.3.1

Edited by vscorpion (see edit history)
Link to comment
Share on other sites

1 вопрос:

Читал в официальном документе, что можно переопределить методы класса поместив файл по одному из путей:

/override/controllers/front/ProductController.php

/modules/my_module/override/controllers/front/ProductController.php

 

Я создал модуль, который отлично работает, но мне надо полностью видоизменить Manufacturer. Весь его вывод. если же я помещаю свои переопределенные методы в

/override/controllers/front/Manufacturer.php то все работает если же в/modules/my_module/override/controllers/front/Manufacturer.php, то загружается стандартная страница. Почему? файлы идентичны.

Я хочу создать нормальный модуль для своих нужд - для использования его в своих дальнейших магазинах. как мне сделать так, чтобы можно было установить и удалить его потом, с возможностью безопасного обновления магазина.

 

 

Там система немного другая: переопределенные классы/контроллеры не подхватываются из модулей на лету. Они корректно сливаются с теми же переопределенными классами/контроллерами из общей "оверрайд" папки во время ИНСТАЛЛЯЦИИ модуля. И также корректно оттуда "вытираются" при ДЕИНСТАЛЛЯЦИИ.

 

2 вопрос:

Я создал модуль отображающий нужные мне категории на главной странице, но я хочу поменять линки, чтобы при нажатии на них можно было посмотреть какие производители принадлежат данной группе. тоетсь скажем у производителя а имеются товары в категории телевизоры, как передать какой-от параметр ил ичто-то. Я уже пробовал переопределять метод getCategoryLink в классе LINK, но что-то я где-то не доделываю...

подскажите в каком направлении копать. Мне очень понравилась система Presta, хочу ее оптимизировать под свои нужды. МОгу позже как доделаю поделиться модулями..

Спасибо

 

 

Переделывайте .TPL в том месте, где формируются линки.

Link to comment
Share on other sites

спасибо за ответ, можно поподробнее не совсем понятно.

 

public function install()
{
 if (!parent::install() ||
  !$this->registerHook('leftColumn') ||
  !$this->registerHook('home') ||
  !$this->registerHook('header'))
  return false;
 Configuration::updateValue('VL_MANUFACTURER_LOGO', 1);
 Configuration::updateValue('VL_MANUFACTURER_MIN_PAY_PROD', 1);
 Configuration::updateValue('VL_MANUFACTURER_PAY_DELIVERY', 1);
 Configuration::updateValue('VL_MANUFACTURER_TIME_DELIVERY', 1);
 Configuration::updateValue('VL_MANUFACTURER_DESCRIPTION', 1);
 Configuration::updateValue('VL_MANUFACTURER_CATEGORY', 1);
 Configuration::updateValue('VL_MANUFACTURER_NUM_COMMENT', 1);
 Configuration::updateValue('VL_MANUFACTURER_RATING', 1);
 Configuration::updateValue('VL_MANUFACTURER_COLUMN', 3);
 Configuration::updateValue('VL_MANUFACTURER_SORT_WAY', 0);
 Configuration::updateValue('VL_MANUFACTURER_SORT', 2);
 return true;
}

 

имею переопределенный класс

 

<?php
class Manufacturer extends ManufacturerCore
{
/**
  * Return manufacturers
  *
  * @param boolean $get_nb_products [optional] return products numbers for each
  * @return array Manufacturers
  */
public static function getManufacturers($get_nb_products = false, $id_lang = 0, $active = true, $p = false,
 $n = false, $all_group = false)
{
}
}

 

что куда надо прописать, чтобы при инсталяции он автоматом установился в /override/class/Manufacturer.php и пи удалении удалился?

 

в .tpl - там же берется

$link->getmanufacturerLink($manufacturer.id_manufacturer, $manufacturer.link_rewrite)

 

а тому же меняется я так понял в Link.php то есть получается через куки передавать параметр категории?

 

объясните пожалуйста.

Edited by vscorpion (see edit history)
Link to comment
Share on other sites

так вроде первое понял, но выдает ошибку при установке

Не могу установить подмену (override): Class LinkOverride does not exist

 

 

<?php
/*
* 2013 Vlad Mordvinov
*
* Prestashop module: link classes override
*/[/size]

[size=4]class Link extends LinkCore
{
/**
 * Create a link to a category
 *
 * @param mixed $category Category object (can be an ID category, but deprecated)
 * @param string $alias
 * @param int $id_lang
 * @param string $selected_filters Url parameter to autocheck filters of the module blocklayered
 * @param int $link_type Type link: 0 - default, 1 - manufacturer, 2 - Supplier
 * @return string
 */
public function getCategoryLink($category, $alias = null, $id_lang = null, $selected_filters = null, $link_type = 0)
{
 switch($link_type) {
  default:
  case 0:
$urlHTTP = $LinkCore->getCategoryLink($category, $alias, $id_lang, $selected_filters);
  break;
  case 1:

  break;
  case 2:

  break;
 }[/size]
[size=4]//  return $url.Dispatcher::getInstance()->createUrl($rule, $id_lang, $params, $this->allow);
 returk $urlHTTP;
}[/size]
[size=4]}[/size]
[size=4]

 

 

если удалить этот класс то все гуд, класс Manufacturer.php перезаписывается как вы и сказали. Но вот Link.php нет

Edited by vscorpion (see edit history)
Link to comment
Share on other sites

В classes\module\Module.php где-то в строке 1892

eval(preg_replace(array('#^\s*<\?php#', '#class\s+'.$classname.'(\s+extends\s+([a-z0-9_]+)(\s+implements\s+([a-z0-9_]+))?)?#i'), array('', 'class '.$classname.'Override'), implode('', $module_file)));

Замените eval на echo. Интересно что он покажет при установке Link.php

Link to comment
Share on other sites

В classes\module\Module.php где-то в строке 1892

eval(preg_replace(array('#^\s*<\?php#', '#class\s+'.$classname.'(\s+extends\s+([a-z0-9_]+)(\s+implements\s+([a-z0-9_]+))?)?#i'), array('', 'class '.$classname.'Override'), implode('', $module_file)));

Замените eval на echo. Интересно что он покажет при установке Link.php

 

Не могу установить подмену (override): Class CarrierOverrideOriginal does not exist

 

что-то как-то через раз ставит о

 

 

 

примерно понял, если какието нестыковки в названии переменной в модуле он и не ставит, сейчас поправил поставился.

 

ВОпрос другой теперь, Если я теперь хочу в контроллере во front поменять вывод шаблона - я ка кнаписано в инструкции запихал файл в /modules/views/templates/front/vlmanufacturer.tpl

 

в модуле прописал его вывод, но что-то ничего не скопировалось в папку /theme/modules/vmmodules

Edited by vscorpion (see edit history)
Link to comment
Share on other sites

×
×
  • Create New...