Категории

[FAQ] Часто задаваемые вопросы и ответы

Проблемы и решения

Ошибки и исправления

Общие вопросы

Расширения

Установка и обновление

Модули

Шаблоны

Локализация интерфейса

Коммерческие предложения

Учимся бизнесу

Бизнес книги

Поисковая оптимизация (SEO)

Магазины на ShopOS

Хостинг для ShopOS

Предложения и пожелания

Курилка

Ошибка. Не работала функция plugurl в плагинах (v2.5.3)

Есть, к примеру, такой вот код.
В нем, в принципе, все понятно. Но. Если перейти на страницу плагина в админке, то в в исходном коде плагина, функци я plugurl() прописывает пути не к плагину manager, а к плагину scrolling. Естественно, если данный плагин включен. Если его выключить, то другой включенный плагин подцепит и впихнет его пути вместо manager.


add_action('page_admin', 'manager_page');
add_action('head_admin', 'manager_head');

function manager_page() {

// Подключаем нужные файлы в хедер только на странице плагина
function manager_head() {
_e ('<link rel="stylesheet" type="text/css" href="'.plugurl().'css/style.css">');
_e ('<script language="javascript" src="'.plugurl().'js/jquery-1.4.2.min.js"></script>');
_e ('<script language="javascript" src="'.plugurl().'js/iColorPicker.js"></script>');
}

include (dirname(__FILE__).'/manager_page.php');
}


Как побороть то? Может что-то не правильно делаю?


Похоже,  plugurl()  берет путь от последнего подключенного плагина.
Очень криво как-то...


Ага.
Так же в файле manager_page.php, в путях к картинкам используется plugurl(), и так же убиваются пути.
Это прям проблема. Ибо плагины кривые из-за этого получаются.


Это что у Вас


функция
функция
функция
функция

Четыре уровня вложенности, не считая двух уровней вложенности определений функции!
manager_head() выньте из manager_page()


Если вынуть manager_head() то эти скрипты будут подключаться на всех страницах!

А что плохого в этом?


А как тогда обойти это дело и подрубить скрипты в head именно на странице плагина?

В любом случае, проблему пока вызывает plugurl()


А стандартно, так:


if ( is_page('manager_page') ) {
manager_head();

}

// Подключаем нужные файлы в хедер только на странице плагина
function manager_head() {
_e ('<link rel="stylesheet" type="text/css" href="'.plugurl().'css/style.css">');
_e ('<script language="javascript" src="'.plugurl().'js/jquery-1.4.2.min.js"></script>');
_e ('<script language="javascript" src="'.plugurl().'js/iColorPicker.js"></script>');
}

function manager_page() {
include (dirname(__FILE__).'/manager_page.php');

}

??
Если и так не сработает, то ещё:

$plug_url = plugurl();
_e ('<link rel="stylesheet" type="text/css" href="' . $plug_url . 'css/style.css">');


Нет. Все равно выводит подключенные скриипты на всех страницах.
Причем включен первым плагином был manager, а вторым boxes, и в УРЛах везде boxes прописывается. Если вслючить первым boxes, а вторым manager, то в путях везде manager ;D ;D


Еще какой-то косяк с текстовками.

Например если я в основном файле плагина пропишу
define('HEADING_TITLE','Менеджер');
То на всех страницах админки будет в заголовках написано Менеджер.

А вот если я помещу
define('HEADING_TITLE','Менеджер');
в функцию manager_page() и дам другое название, например не HEADING_TITLE, а HEADING_TITLESSSS, то тогда все норм.

Т.е. совпадает получается название с уже существующим тегом заголовка...

как-то запутанно все)


поправлено

http://code.google.com/p/shopos/source/diff?spec=svn1816&r=1816&format=side&path=/trunk/upload/admin/includes/classes/main.php



Похоже,  plugurl()  берет путь от последнего подключенного плагина.
Очень криво как-то...


нет. перед вызовом функции экшена выставляется текущая папка текущего плагина.



Еще какой-то косяк с текстовками.

Например если я в основном файле плагина пропишу
define('HEADING_TITLE','Менеджер');
То на всех страницах админки будет в заголовках написано Менеджер.

А вот если я помещу
define('HEADING_TITLE','Менеджер');
в функцию manager_page() и дам другое название, например не HEADING_TITLE, а HEADING_TITLESSSS, то тогда все норм.

Т.е. совпадает получается название с уже существующим тегом заголовка...

как-то запутанно все)


константу можно определять только один раз.
а файл с твоим define('HEADING_TITLE','Менеджер'); инклудится раньше чем эта HEADING_TITLE определяется в движке.

если включить вывод notice то будет видно что при попытке повторного объявления константы возникает проблемка


Источник



Copyright ShopOS