• Как в ZF2 использовать не ZF2-код?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    composer для зависимостей. И копипастить что-либо в контроллеры это не хорошо, контроллеры должны быть тонкими и тупыми и ничего толком уметь не должны. Если контроллеру нужно что-то сделать, то обычно он вызывает сервис и и просит сделать что нужно уже этот сервис.

    Сервис - просто класс. В контексте вашего вопроса - это класс которому в конструктор передается инстанс библиотеки, от которой он зависит. Все это разруливается через Dependency Injection.
    Ответ написан
    Комментировать
  • Есть сервис для того, чтобы научиться бегло понимать английскую речь?

    Мне очень нравится duolingo.com. Он бесплатен, у него отличный дизайн и хорошая идея:
    1. Проходите ряд бесплатных курсов с интерактивными упражнениями.
    2. Участвуете в краудсорсинговом переводе текстов, улучшая свой навык языка.

    Если же говорить именно о восприятии на слух, то у меня всё сложилось следующим образом:

    а. Начал с просмотра фильмов строго на английском. Смотрим с субтитрами, ставим на паузу и переводим. Да, неприятно поначалу, но вы решите: вы учите или ищете "новые способы". Если учите, то смиритесь с напрягом на первые несколько фильмов. Уже на 5-м, скажем, увидите прогресс: останавливать надо будет заметно реже. Довольно быстро вы начнёте получать новое удовольствие от просмотра в оригинале. Мне иногда говорят: но я же не понимаю по английски, как смотреть? А я отвечаю: что за проблема, если вы не поймёте половину фраз в фильме? Вам хоть один просмотренный фильм хоть что-то дал, при полном понимании сказанного в нём? То-то.

    б. Дальше пошло чтение, начиная с простого и увеличивая сложность. На андроиде удобно читать, есть интеграция со словарём. Я использую FBReader + GoldenDict.

    в. Вообще, везде, где только можно, окунайтесь в языковой контекст. Интерфейс всего софта - только англ., если друзья знают язык - переписывайтесь с ними на нём, посещайте встречи, где говорят на английском, ищите носителей на couchsurfing.org (организуют встречи, на которых путешественники знакомятся с местными).

    г. Аудиокниги и подкасты - это шикарно. Потому, что вы можете учить язык каждый день часами: в дороге, во время пробежки и так далее. Аудиокниги качайте на торрентах. Ну, можете взять одну бесплатно в Audible. Клёвые подкасты: 99% Invisible, Freakonomics, NPR Planet Money, NPR Ted Radio Hour, The Moth. Тысячи их.

    Вообще, советую не париться и слушать речь. Вы будете волноваться оттого, что ничего не понимаете. Не волнуйтесь и продолжайте слушать. Понимание придёт со временем, сами удивитесь. Собственно, дети именно так и учат, что даже потом становятся теми самыми "носителями", а нам, взрослым, проще, есть жизненный опыт.

    P.S. Я свободно говорю и пишу на англйиском, в ряде контекстов мне вообще всё равно, на каком языке говорить. Таким же способом учу немецкий, на котором могу изъясняться через пень-колоду. Английский начинал с типичного для наших широт "intermediate" (что-то учили в институте). Немецкий начал с нуля.
    Ответ написан
    3 комментария
  • Интернет-магазин на Ruby on rails. Нужен толковый совет?

    viktorvsk
    @viktorvsk
    После некоторого времени потраченного на поиски екоммерс на руби сделал вывод, что спри - это единственный вариант. По коду, по поддержке. Поддерживает и 3 и 4 рельсы. Завести можно и на mysql и на Postgres и на sqlite, даже на монго, думаю. Разве что, мне кажется, не стоит использовать Synergy (русский адаптированный форк), лучше оригинал.

    Вообще, считаю, что и рельсы, и нод и фласк\джанго иже с ними - не для типичных проектов (блоги, цмс, екоммерс) и пользователей, которым нужен юзер-френдли интерфейс везде. На каждом шагу визивиг. Плагины. Темы. И что б ни капли кода в глаза не видеть. Нетипичные проекты должныподдерживать программисты, поэтому все эти цмс и т.д. не имеют смысла. ИМХО.

    Насчет гемов я думаю, ваши страхи беспочвенны - перед тем, как ставить гем вы все равно зайдете на рубитулбокс, рубигемс или гитхаб. И там уже увидете, когда были последние изменения. Да и в просроченном геме бывает ничего плохого нет. Да и поддерживаются подавляющее большинство очень хорошо, а что не поддерживается - сразу куча инфы на первых страницах поисковика.
    Ответ написан
    Комментировать
  • Чем заслужил свою популярность Laravel?

    ajaxtelamonid
    @ajaxtelamonid
    Laravel
    Тем, что там можно писать мало там, где мы привыкли писать много. Подобный "конвеншн овер конфигурейшн" - он помимо прочего оставляет ощущение, что автор пишет не сферическую вещь в вакууме, которая якобы должна подойти всем, а для нас, для простых рабочих пацанов с окраин, со своими вполне конкретными юзкейсами. Т.е. он 1. человек умный и 2. знает жизнь. Это подкупает.

    Например, в output идет то, что возвращено из контроллера, а если возвратить ORM-объект или массив (точнее коллекцию) ORM-объектов, то будет отдан json, причем со всеми связанными объектами. Масса нужных в хозяйстве вещей, которые идут из коробки (миграции, редис, кэш с множеством провайдеров, работа с очередями, консольная тулза artisan для разнообразных обслуживающих вещей). Изкоробочная работающая сборка вьюх в лейаут, минимум возни с авторизацией. Скоупы в ORM. Кусочки конфигов в файлах, которые удобно ставить в .gitignore. В общем, масса такого вот, мелкого, но очень удобного.

    На Laravel ОДНОВРЕМЕННО можно уйти в глубины аццкого хадкора по Фаулеру, с тестированием всего и вся, с интерфейсами, депенденси инжекшнами, репозиториями, обсерверами, ентитями, гексагональными сценариями итд, итп, _подставить_любимый_паттерн_, И в то же время забить на это всё, сгенерить _ide_helper для подсказок по "фасадам" в IDE и фигачить код со статическими вызовами, как будто весь фреймворк написан на статике, как Кохана. Т.е. и сайт-знакомому-за-вечер и огроменный кровавый энтерпрайз делаются на одном фреймворке - в зависимости от того, насколько глубоко исполнитель хочет погружаться в свой продукт. Подобная гибкость - это, имхо, очень круто.

    И еще - как показала практика фреймворкостроительства, или ты двигаешься вместе с развитием php, либо ты делаешь "более лучшее, удобное и грамотное" решение и тихо загниваешь с своем междусобойчике за пару лет. Laravel двигается максимально близко к php - следование psr, composer-платформа в качестве базы, фрейморк ставится оттуда и пакеты расширения тоже имеют composer-формат. Что говорит о том, что у фреймворка есть все шансы прожить долгую и счастливую жизнь.
    Ответ написан
    Комментировать
  • Как изменить расположение элементов WooCommerce в WordPress?

    Punkie
    @Punkie
    В папке плагина woocommerce есть файл со всеми хуками - woocommerce_hooks.php . Находите в нем отрезок, который отвечает за нужный вам кусок шаблона (в вашем случае woocommerce_single_product_summary), смотрите вызовы add_action.
    У вас они будут как раз такие, как закоментировано в коде выше, то есть:
    @hooked woocommerce_template_single_title - 5
                 * @hooked woocommerce_template_single_price - 10
                 * @hooked woocommerce_template_single_excerpt - 20
                 * @hooked woocommerce_template_single_add_to_cart - 30
                 * @hooked woocommerce_template_single_meta - 40
                 * @hooked woocommerce_template_single_sharing - 50


    В данном случае числа - это последовательность (приоритет) активации action'ов.
    Теперь вам нужно в functions.php вашей темы деактивировать эти action'ы методом remove_action и выполнить их активацию в нужном вам порядке.
    Например, вам нужно, чтобы сначала выводилось название товара, затем краткое описание, затем цена и тд.
    Код будет примерно такой:
    *тут перечисляем все строки с методом remove_action:
    
    remove_action('woocommerce_single_product_summary', 'woocommerce_template_single_title', 5);
    remove_action('woocommerce_single_product_summary', 'woocommerce_template_single_price', 10);
    ... и т.д.
    
    *Теперь вызываем те же действия по хуку woocommerce_single_product_summary, но в нужной нам последовательности:
    add_action('woocommerce_single_product_summary', 'woocommerce_template_single_title', 5);
    add_action('woocommerce_single_product_summary', 'woocommerce_template_single_excerpt', 10);
    add_action('woocommerce_single_product_summary', 'woocommerce_template_single_price', 15);
    ... и т.д.

    Числовой приоритет вызова обычно делают кратным 5 для того, чтобы можно было потом еще что нибудь впихнуть между вызовами. Например, захотите потом добавить вывод ключевых слов или уникального поля товара между названием и кратким описанием. Тогда приоритет вызова можно будет сделать 6-9 без необходимости заново перебирать весь массив вызова хука.

    Подробнее про понятия hook, action и filter читайте в официальном руководстве: Introduction to hooks: actions and filters
    Ответ написан
    7 комментариев