+0.04
Рейтинг
0.12
Сила

Некоторые вопросы по разработке плагинов

Написал около десятка плагинов, но мне кажется я не все понял о наследовании в 0.4.2

1) как в шаблоне использовать данные конфига для foreach, elseif?
Пример:
{if {cfg name='path.root.web'}}
    это естественно не работает, как правильно?
    если мы делегируем только шаблон и у нас нет возможности присвоить
    переменной значение конфига в блоке/экшене/хуке
{/if}

я пока решаю эту проблему таким костылем

{php}
if ((Config::Get('plugin.name.value')) && $oUserCurrent {
    {/php}
    вот такой костыль
    {php}
}
{/php}


2) Как обстоят дела с наследованием экшенов?
Если мне приходится вмешаться в регистрацию, чтобы добавить проверку, мне приходится переопределять метод класса регистрации, должен быть лучший путь

class PluginExample extends Plugin {

    /**
     * Делегирование регистрации
     */
    public $aInherits = array(
        'action' => array('ActionLogin', 'ActionRegistration', 'ActionTalk'),
    );

    ...
}


class PluginExample_ActionRegistration extends PluginExample_Inherit_ActionRegistration {

    protected function EventIndex() {
    ...
    $this->PluginAntistatist_Antistatist_addLogin($oUser->getLogin());
    ...
    }

выдирать ради этого целый метод это большой костыль. вроде можно повесить свой код на конец или начало выполнения метода модуля регистрации, но что, если надо вывести сделать проверку и в экшене регистрации вывести ошибку, совать ее в модуль не правильно?

3) вот если мне необходимо изменить голосование за топики, строчку

<li class="minus"><a href="#" onclick="lsVote.vote({$oTopic->getId()},this,-5,'topic'); return false;"></a></li>

как мне это лучше сделать? каким образом переопределить файл аякса, принимающий запрос на изменение рейтинга топика, а так же можно ли изменить саму эту строчку, не делегируя целиком шаблоны topic.tpl и topic_list.tpl и закрывая тем самым эти шаблоны от изменения другими плагинами?

Проблема с загрузкой файла

Скрипт посылает аяксом файл на /include/ajax/uploadfile.php

Если обработать принимаемый файл так —

if (!$sFile = $oEngine->Topic_UploadTopicImageFile($_FILES['img_file'], $oUserCurrent)) {
            $sMsgTitle = $oEngine->Lang_Get('error');
            $sMsg = $oEngine->Lang_Get('uploadimg_file_error');
        }

то все работает, но мне нужно здесь задать собственное имя файла если я вставаляю код

$sDirUpload=$oEngine->Image_GetIdDir($oUserCurrent->getId());
$aParams=$oEngine->Image_BuildParams('topic');

if ($sFileImage = $oEngine->Image_Resize($sFileTmp,$sDirUpload,'jnjkn.jpg',Config::Get('view.img_max_width'),Config::Get('view.img_max_height'),Config::Get('view.img_resize_width'),null,true,$aParams)) {
			@unlink($sFileTmp);
			$oEngine->Image_GetWebPath($sFileImage);
		}

или хотя бы

$sFileTmp=Config::Get('sys.cache.dir').func_generator();
if (!move_uploaded_file($_FILES['img_file'],$sFileTmp)) {			
			return false;
		}

то так же скрипт видимо выдает ошибку, и яваскрит не может распарсить ответ аякса, но никак не пойму, в чем же здесь ошибка???

Вопрос про делегириование

Мне нужно делегировать 3 различных экшена, а точнее наследовать, чтобы изменить в них ивенты


protected $aDelegates = array(
                        'action' => array('ActionTopic'=>'PluginAntispam_ActionTopic')
                        );


Проблема в том, что тут можно прописать только один экшен, иначе каждый последующий перезапишет элемент action массива $aDelegates,
так как же мне несколько делегатов сделать?