bem-site / bem-forum-content-ru

Content BEM forum for Russian speak users
MIT License
56 stars 6 forks source link

Хелперы или функции в шаблонах #819

Open adinvadim opened 8 years ago

adinvadim commented 8 years ago

Допустим есть функция someFunc которая принимает строку, и возврщает модифицированную строку, как мне ее внеднрить в свои шаблоны? Если можно отдельным блоком, то как лучше это сделать? Или же если дбавлять метод к контексту (this.someFunc) то где лучше его объявить?

voischev commented 8 years ago

Думаю тут ответят как правильно передать функцию. Но интересно почему бы не делать это на сервере? Все равно же данные приходят от сервера?

adinvadim commented 8 years ago

Например мне пришло кол-во комментариев и в зависимости от кол-во ставить нужное окончание у слова "комменатрий"

tadatuta commented 8 years ago

@adinvadim для склонения слов в зависимости от числительных я бы предложил воспользоваться i18n.

А ответ на исходный вопрос зависит от того, может ли эта функция потребоваться и вне шаблонов. Если да, то можно положить ее в отдельный модуль и подключить через https://ru.bem.info/tools/bem/enb-bemxjst/readme/#Подключение-сторонних-библиотек

А если функция нужна исключительно в шаблонах, то ее стоит добавлять так:

// util.bemhtml.js

oninit(function(exports) {
    exports.BEMContext.prototype.utilFunction = function() {
        // ...
    }
});

В результате эта функция будет доступна из всех шаблонов через this.utilFunction();

kompolom commented 8 years ago

А в bh такое не планируется?

tadatuta commented 8 years ago

@kompolom В BH это есть: https://ru.bem.info/tools/bem/enb-bh/readme/#Особенности-работы-пакета

adinvadim commented 8 years ago

@tadatuta Понял, огромное спасибо!

kompolom commented 8 years ago

@tadatuta Круто, как-то упустил. @zxqfox А в bh-php тоже есть такая возможность?

qfox commented 8 years ago

@kompolom Есть такое: https://github.com/bem/bh-php/blob/82cd0e1c3f7d67878c0bc7a82d413e73957f34dc/src/BH.php#L28-L38 А что ты туда положишь — на свой страх и риск ;-)

UPD: В технологии enb-bh-php, по аналогии с js, можно сделать, никто не просил. Только надо определиться что мы указываем, и что складываем. В пхп же нет модулей как таковых, кроме composer, где модули подключаются через php-неймспейсы. В общем, смысл этого всего не ясен.

kompolom commented 8 years ago

@zxqfox смысл: есть функция которая используется в нескольких шаблонах. Хочется вынести ее куда-нибудь

qfox commented 8 years ago

@kompolom Я бы туда что-то такое положил: DependencyInjection

А там уже хоть функцию, хоть трава не расти

UPD: Но можно и просто

$bh->lib = [];
$bh->lib['myfunc'] = function() { echo "That's all, Folks!" . PHP_EOL; };