ФорумПрограммированиеPHP для идиотовРасширения PHP → Blitz 0.7 и php-функции

Blitz 0.7 и php-функции

  • vasa_c

    Сообщения: 3127 Репутация: N Группа: в ухо

    Spritz 27 июля 2011 г. 5:03

    Был у нас Blitz 0.6 и понадобилось вызывать в нём PHP-фукнции.
    В 0.7 их можно вызывать в виде {{ php::function(args) }}, поэтому на него и перешли.

    И тут ПЦ - половину функций стало возможно вызывать даже без "php::". Просто {{ function(args) }}.
    И, что цуко характерно, они вызываются в первую очередь, а то, что у нас уже в наследниках Blitz были определены методы с такими же именами, им не интересно.

    Где вообще об этом написано? Где Changelog нормальный этого блитца? Как это отключить нах, в настройках не видно?
    Здесь были, кажется люди, которые с Blitцом работали.
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 27 июля 2011 г. 5:04, спустя 1 минуту 22 секунды

    Здесь были, кажется люди, которые с Blitцом работали.

    их уволили, видимо сразу после перехода на 0.7 xD
    Сапожник без сапог
  • mario

    Сообщения: 6067 Репутация: N Группа: Джедаи

    Spritz 27 июля 2011 г. 5:46, спустя 41 минуту 46 секунд

    че профи обосрались!!!111???!111
  • AlexB

    Сообщения: 4290 Репутация: N Группа: в ухо

    Spritz 27 июля 2011 г. 9:34, спустя 3 часа 48 минут 40 секунд

    1. 0.7 насколько я понимаю версия недоделанная, она с приставкой -dev и у меня с ней тоже были проблемы.
    2. PHP функции в шаблоне - зло! У меня ни разу в них потребность не возникла, что мешает свою юзер-функцию сделать, если уж так понадобилось?
  • mario

    Сообщения: 6067 Репутация: N Группа: Джедаи

    Spritz 27 июля 2011 г. 9:48, спустя 13 минут 29 секунд

    2. PHP функции в шаблоне - зло! У меня ни разу в них потребность не возникла, что мешает свою юзер-функцию сделать, если уж так понадобилось?

    нам это не нужно, нам нужно, что бы их не было )
    Спустя 35 сек.
    мы как раз таки и использовали свою функцию, но после перехода на 0.7, у нас поломалась наша пользовательская функция )
  • vasa_c

    Сообщения: 3127 Репутация: N Группа: в ухо

    Spritz 27 июля 2011 г. 9:56, спустя 7 минут 47 секунд

    AlexB, спасибо.

    PHP функции в шаблоне - зло! У меня ни разу в них потребность не возникла, что мешает свою юзер-функцию сделать, если уж так понадобилось?

    Потому что дизайнера постоянно фантазии посещают. Типа, сделайте чтобы в футере в копирайте год всегда текущий был.
    Писать каждый раз новый метод вида getCurrentYear() не охото.
    Можно сделать, конечно, callPHPFunc($name, $args), но если уже есть возможность решили её использовать
    Спустя 88 сек.
    И ещё у меня юнит-тесты (phpunit) зачастую вылетают с Segmentation Fault в тех местах, где Blitz используется.
    В любой другой среде воспроизвести такую хрень не удалось.
    Не сталкивался никто с таким?
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 27 июля 2011 г. 10:15, спустя 19 минут 32 секунды


    2. PHP функции в шаблоне - зло! У меня ни разу в них потребность не возникла, что мешает свою юзер-функцию сделать, если уж так понадобилось?
    +1
    Спустя 62 сек.
    Потому что дизайнера постоянно фантазии посещают. Типа, сделайте чтобы в футере в копирайте год всегда текущий был.
    Писать каждый раз новый метод вида getCurrentYear() не охото.

    А мы же в кинсбурге вроде делали что-то наподобие джанговкого context_processor'а?
    Который может передавать какие-либо глобальные переменные в жаблон?
    Спустя 79 сек.
    https://docs.djangoproject.com/en/dev/ref/settings/#std:setting-TEMPLATE_CONTEXT_PROCESSORS
    adw/0
  • vasa_c

    Сообщения: 3127 Репутация: N Группа: в ухо

    Spritz 28 июля 2011 г. 2:31, спустя 16 часов 15 минут 28 секунд

    А мы же в кинсбурге вроде делали что-то наподобие джанговкого context_processor'а?
    Который может передавать какие-либо глобальные переменные в жаблон?

    Здесь не глобальная переменная, здесь date('Y')
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 28 июля 2011 г. 4:49, спустя 2 часа 18 минут 30 секунд

    А что мешает:

    return {'CURRENT_YEAR': date('Y')}

    ?
    adw/0
  • vasa_c

    Сообщения: 3127 Репутация: N Группа: в ухо

    Spritz 28 июля 2011 г. 6:46, спустя 1 час 56 минут 19 секунд

    влом. и ты вообще забыл PHP
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 28 июля 2011 г. 6:57, спустя 11 минут 40 секунд

    Ну судя по моим последним коммитам в кинсбург я ещё его плмню )
    adw/0
  • fisher

    Сообщения: 6 Репутация: N Группа: Кто попало

    Spritz 13 марта 2012 г. 0:33, спустя 228 дней 17 часов 35 минут

    В 0.7 API коллбеков устаканился не сразу. Сейчас действуют следующие правила:
    1) Если в шаблоне стоит {{ this::method }} - это всегда метод объекта-шаблона
    2) Если в шаблоне стоит {{ bla::method }} - зовём статический PHP-метод
    3) Если просто {{ method }} то - по умолчанию зовем PHP, затем зовём метод объекта-шаблона. И есть новая настройка, php_callbacks_first которая меняет порядок вызова, если php_callbacks_first = 0, то сначала будет шаблон, а потом PHP. Вероятнее всего по умолчанию надо ставить php_callbacks_first = 0, сейчас 1, я просто хочу понять реакцию комьюнити. У меня было впечатление, что никто не морочился со своими функциями и все хотели PHP. Сам я программлю редко, но в компании у нас запрещены и функции, и PHP, и логика в шаблонах, но это долгий разговор.

    Вот тикет про это дело
    http://alexeyrybak.com/blitz/bt/view.php?id=281

    Ставьте тикеты, если что-то не работает, или пишите на адрес blitz-php at googlegroups d0t com
  • AlexB

    Сообщения: 4290 Репутация: N Группа: в ухо

    Spritz 13 марта 2012 г. 4:25, спустя 3 часа 51 минуту 34 секунды


    Если просто {{ method }} то - по умолчанию зовем PHP, затем зовём метод объекта-шаблона. И есть новая настройка, php_callbacks_first которая меняет порядок вызова, если php_callbacks_first = 0, то сначала будет шаблон, а потом PHP. Вероятнее всего по умолчанию надо ставить php_callbacks_first = 0, сейчас 1, я просто хочу понять реакцию комьюнити.
    Привет, Алексей. На мой вкус, конечно 0. Это сохранит совместимость со всем ранее сделанным без подкручивания настроек.


    У меня было впечатление, что никто не морочился со своими функциями и все хотели PHP. Сам я программлю редко, но в компании у нас запрещены и функции, и PHP, и логика в шаблонах, но это долгий разговор.
    Я морочился. Например, для компактности шаблонов, сильно не хватает конструкции switch (А можно сделать???:)), посему была написана функция:

    /**
    * Реализация языковой конструкции switch.
    *
    * @param string $var - в идеале одно из значений
    * @param string $case - значения через разделитель без пробелов
    * @param string $value - строки вывода через разделитель (запятую по умолчанию)
    * @param string $default - строка для вывода, если $var не совпадает ни с одним из значений
    * @param char $separator - разделитель для строк вывода (по умолчанию - запятая)
    * @return string - строку вывода
    */
    public function switcher($var, $case, $value, $default = '', $separator = ',')
    {
    $exp_case = explode($separator, $case);
    $exp_value = explode($separator, $value);
    $key = array_search($var, $exp_case);
    return ($key === false || !isset($exp_value[$key]) ? $default : $exp_value[$key]);
    }


  • fisher

    Сообщения: 6 Репутация: N Группа: Кто попало

    Spritz 13 марта 2012 г. 4:54, спустя 29 минут 37 секунд


    Я морочился. Например, для компактности шаблонов, сильно не хватает конструкции switch (А можно сделать???:)), посему была написана функция:


    а чем это отличается от IF/ELSEIF/ELSE ? не пишем во всех условиях предикат полностью? можно пример, чтоб было понятно, что есть экономия. Чем будет чреват SWITCH - будут куски между SWITCH и первым CASE + между END от последнего CASE и END от SWITCH и главное нужно будет больше END пихать в шаблон (после каждого CASE и общий). Не думаю, что в целом будет компактнее.
  • fisher

    Сообщения: 6 Репутация: N Группа: Кто попало

    Spritz 13 марта 2012 г. 5:16, спустя 22 минуты 8 секунд


    Был у нас Blitz 0.6 и понадобилось вызывать в нём PHP-фукнции.
    В 0.7 их можно вызывать в виде {{ php::function(args) }}, поэтому на него и перешли.
    И тут ПЦ - половину функций стало возможно вызывать даже без "php::". Просто {{ function(args) }}.
    Здесь были, кажется люди, которые с Blitцом работали.


    мой косяк. в одной версии добавил этот "зарезервированный" неймспейс, а потом его убрал. верну, наверное. написали бы сразу в баг-трекер или напрямую :)
    и в доке написано пока по-старому. пофикшу.

Пожалуйста, авторизуйтесь, чтобы написать комментарий!