Пользователь пока ничего не рассказал о себе

Достижения

Все достижения (12)

Наибольший вклад в теги

Все теги (84)

Лучшие ответы пользователя

Все ответы (377)
  • Что изучать начинающему Bitrix-разработчику?

    prototype_denis
    @prototype_denis
    Symfony
    Выкинуть Bitrix и 19 дней сидеть исключительно тут не менее 5 часов. На 20-ый день вернуться на Тостер с новым вопросом, где в тексте вашего вопроса будет что-то вроде
    ... PHP (Уже получше). Что посоветуете почитать?
    .
    Вам ответят ссылками вроде этой. В день XYZ снова скачать Bitrix, вернуться на Тостер и задать вопросы уже конкретно Bitrix'а.
    Ответ написан
    Комментировать
  • Design patterns in PHP?

    prototype_denis
    @prototype_denis
    Symfony
    https://sourcemaking.com/ С примерами, картинками и без воды.
    Ответ написан
    2 комментария
  • Какой микро модульный php движок посоветуете для изучения внутренностей?

    prototype_denis
    @prototype_denis
    Symfony
    Позвольте вас отправить в google со слегка изменённым вопросом, руководствуясь следующими аргументом, что 90% задач решаются с помощью шаблонов и тратить время на велосипедостроение даже в целях самообучения, крайне не рекомендуется, потому что изучая архитектуру в общем - вы решите больше задач и построете свой "микродвижок" уже через пару дней, после понимания основ дизайна.

    Взглянуть на микродвижок
    <?php
    
    error_reporting(E_ALL);
    ini_set('display_errors', 1);
    
    class Extension1
    {
        public function renderContent()
        {
            return "Hello";
        }
    }
    
    class Extension2
    {
        public function renderContent()
        {
            return "Word!";
        }
    }
    
    
    class MicroApp
    {
        private $extensions;
    
        public function __construct($extensions)
        {
            foreach ($extensions as $extension) {
                $this->extensions[] = new $extension();
            }
        }
    
        public function run()
        {
            echo "<!DOCTYPE html>";
            foreach ($this->extensions as $extension) {
                echo htmlspecialchars($extension->renderContent(), ENT_COMPAT, 'UTF-8', true) . " ";
            }
            echo "</html>";
        }
    }
    
    
    $app = new MicroApp([
        'Extension1',
        'Extension2',
    ]);
    
    $app->run();

    Ответ написан
    1 комментарий
  • PHP Development. Как осовременниться?

    prototype_denis
    @prototype_denis
    Symfony
    <?php
    
    // Постарался упорядочить в порядке уменьшения силы вырывания 
    // волос на голове
    
    $power  = null;
    $power .= '1. Перейти на PHP 5.6';
    $power .= '2. Composer';
    
    // level up
    
    // Пароли? Да... А так не стоит. Вычёркивай.
    $power .= '3. Отказаться от md5';
    
    // Да прибудет с тобой ООП.
    $power .= '4. Фреймворки!';
    
    // Буквально 5 команд выучишь, ничего сложного
    $power .= '5. Разобраться с VCS ';
    
    // level up
    
    $power .= '6. Никогда не лазить в БД на продакшн, использовать миграции';
    
    $power .= '7. Внешние ключи, триггеры и процедуры';
    
    // Про ключики и связи надо раньше узнать, чем о существовании новомодной базы.
    $power .= '8. Базы данных (посмотреть другие)';
    
    // Опечатался надеюсь? 
    // Точку на 2 слова левее.
    $power .= '9. Трейты вместо Array. Генераторы';
    
    // Панацея?
    $power .= '10. PHPStorm';
    
    // Это пригодится в командной разработке.
    // По началу ты будешь гуглить, как откатить последний коммит
    // и будешь пушить только в мастер.
    $power .= '11. Начать работать по git workflow
            * Всегда есть стабильная ветка, чьё состояние точно соответствует состоянию продакшна
            * Каждой задаче — своя ветка
            * Ветки могут быть разных типов, в зависимости от типа задачи
            * Любая ветка рано или поздно будет влита в стабильную (тем или иным путём) и/или удалена
    ';
    
    // level up
    
    // Для следующих перечисленных надо будет уже знать, как писать тесты,
    // понимать как работает система контроля версий.
    // Осознанно к ним придёшь уже обматерив не один фреймворк.
    $power .= '12. Teamcity, Jenkins, Bamboo (инструменты для выкладки релизов)';
    $power .= '13. Phing, Capistrano, Ant (сценарии сборки)';
    
    // Если линуха, не вздумай сделать после сборки "make install"
    $power .= '14. Поиграться с PHP 7';
    
    $fullPower = (100 * ('0.' . mb_strlen($power, 'UTF-8'))) . '%';
    
    // В $fullPower содержится число характеризующее довольно хорошего разработчика.
    Ответ написан
    5 комментариев
  • Откуда растут ноги у простоты в использовании Twig?

    prototype_denis
    @prototype_denis
    Symfony
    {#- /views/header.twig -#}
    <div>
        <div class="left">
            {% include "/views/header/left" %}
        </div>
        <div class="right">
            {% include "/views/header/right" %}
        </div>
    </div>
    
    {#- /views/header/left.twig -#}
    <ul>
        <li><a href="#!">Link</a></li>
        <li><a href="#!">Link 2</a></li>
    </ul>
    
    
    {#- /views/header/right.twig -#}
    <p class="text-left">Right</p>
    
    
    {#- /views/base.twig -#}
    <!doctype html>
    <html>
        <head>
            <meta charset="utf-8">
            <title>{% block title %}Hello!{% endblock %}</title>
        </head>
        <body>
            <div class="row">
                <div class="col-md-2">
                    {% include "/views/header.twig" %}
                </div>
                <div class="col-md-10">
                    {% block content %}{% endblock %}
                </div>
            </div>
            <div class="row">
                <div class="col-md-12">
                    {% block footer %}{% endblock %}
                </div>
            </div>
        </body> 
    </html> 
    
    
    {#- /views/ajax.twig -#}
    {% block content %}{% endblock %}
    
    
    
    
    {#- /views/pages/base.twig -#}
    {% extends "/views/base.twig" %}
    {% block title %}
        Welcome.
    {% endblock %}
    {% block content %}{% endblock %}
    {% block footer %} (c) 2015 {% endblock %}
    
    
    
    
    {#- /views/pages/blog/index.twig -#}
    {% extends app.isAjax() ? "/views/pages/ajax.twig" : "/views/pages/base.twig" %}
    {% block title %}
        {{ parent() }} This best blog.
    {% endblock %}
    {% block content %}
        <h1>Header</h1>
        <p>Content text</p>
    {% endblock %}
    {% block footer %}{#- remove parent -#}{% endblock %} 
    
    
    Что тут происходит.
    При рендере /views/pages/blog/index.twig 
    шаблонизатор будет подниматься вверх.
    
    В нём переопределяем footer, дополняем title.
    title  = "??? This best blog."
    footer = ""
    content = "<h1>...."
    
    index (проверка переменной) +-> ajax.twig -> вывод
                                |
                                | or
                                |
                                +-> page/base.twig + 
                                                   |
          +----------------------------------------+
          |      Тут по пути уже к базовому шаблону переопределяем footer и title
          |      title  = "Welcome. This best blog."
          |      footer = ""
          |      content = "<h1>...."
          |
          v                 А тут уже include
          base.twig - - - > header.twig - + - - > left.twig
          |                               + - - > right.twig
          v
        вывод
    
    
    +---------------------------------------+
    | +-----------------------------------+ |
    | |                                   | |
    | | +--------------+ +--------------+ | |
    | | | left         | | right        | | | header
    | | +--------------+ +--------------+ | |
    | |                                   | |
    | +-----------------------------------+ |
    | |                                   | |
    | | +----------------------------+    | | base | ajax
    | | | Welcome. This best blog.   |    | | title
    | | +----------------------------+    | |
    | |                                   | |
    | | +----------------------------+    | |
    | | |  Header                    |    | | content
    | | |  Content text              |    | |
    | | +----------------------------+    | |
    | |                                   | |
    | +-----------------------------------+ |
    +---------------------------------------+


    Помимо простой иерархии блоков, в шаблонизаторе очень много интересного.
    Только и успевай документацию читать...

    ЗЫ. По умолчанию тут почему-то html подсветка. (бред)
    Ответ написан
    Комментировать

Лучшие вопросы пользователя

Все вопросы (4)