Форум пользователей Impera CMS
Impera CMS - отличный движок для лёгкого создания интернет магазина.
Обладает невероятным количеством функций, необходимых в онлайн торговле.

Следить
Главная
23:45
17 янв
#
?
написал:

Добрый день.

Подскажите, как можно переопределить текстовые переменные так, чтобы при обновлении движка они не затёрлись; например, можно ли как-то в helper.php прописать их значения?

Например, в файле \objects\cart\Cart.php нужно изменить строку:

$this->push_error('Нужно обязательно ввести е-мейл или номер телефона.');

на

$this->push_error('Ошибка!');

Каким образом это сделать так, чтобы при обновлении движка сохранился изменённый текст?

Спасибо.

12:22
19 янв
#
?
написал:

Второй вопрос по теме: есть ли где-нибудь список папок/файлов, которые точно будут обновлены движком (при обновлении), а какие точно - нет? Верно ли, что может обновиться любой файл движка, за исключением папки "design"?

15:53
20 янв
#
написал:

При обновлении движка может измениться любой файл ядра, поэтому незатираемые исправления рекомендуется делать со стороны шаблона.

Следуя мотиву вашего примера с текстом корзины, таким исправлением могла быть if-вариация вывода переменой $error:

{if !empty($error)}
    <div class="msg error">
        {if $error == 'Нужно обязательно ввести е-мейл или номер телефона.'} Ошибка!
        {elseif $error == '...'} ...
        {else} {$error}
        {/if}
    </div>
{/if}

Но это неудобно, когда $error выводится в разных местах шаблона, и везде хотелось бы применить аналогичные замены. Тогда в шаблоне следовало бы применить некую функцию, например myError:

{if !empty($error)}
    <div class="msg error">
        {myError}
    </div>
{/if}

А тело этой функции прописать в файле helper.php шаблона:

<?php
    class TemplateEmulator {
        protected $cms;

        private function getVar ( $name, & $smarty, $def = null ) {
            $value = $smarty->getTemplateVars($name);
            if (is_null($value)) $value = $this->cms->smarty->getTemplateVars($name);
            return is_null($value) ? $def : $value;
        }

        public function __construct ( & $cms ) {
            $this->cms = & $cms;
            $cms->smarty->registerPlugin('function', 'myError', array($this, 'myError'));
        }

        public function myError ( $params = null, & $smarty = null ) {
            $value = $this->getVar('error', $smarty, '');
            switch ($value) {
                case 'Нужно обязательно ввести е-мейл или номер телефона.': return 'Ошибка!';
                case '...': return '...';
            }
            return $value;
        }
    }
?>
01:25
25 янв
#
?
написал:

Поскольку переменная, содержащая ошибки, может состоять из нескольких склеенных строк, функцию myError изменил так:

public function myErrors ( $params = null, & $smarty = null ) {
    $value = $this->getVar('error', $smarty, '');

    $patterns[0] = '/Нужно обязательно ввести е-мейл или номер телефона./';
    $patterns[1] = '/<br[^>]*><br[^>]*>/';
    $patterns[2] = '/Е-мейл должен быть в стандартном формате (например ivan@mail.ru)./';

    $replacements[0] = 'Моё сообщение о незаполненных контактах';
    $replacements[1] = '<br>';
    $replacements[2] = 'Моё сообщение о неправильном емейле';

    ksort($patterns);
    ksort($replacements);
    $value = preg_replace($patterns, $replacements, $value);
    return $value;
}
10:26
26 янв
#
?
написал:

ksort'ы лишние, массивы уже упорядочены по ключам

Написание ответа

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


Обратите внимание! Для противодействия спаму новые посты форума проявляются с задержкой от нескольких минут, пока не пройдут модерацию.