Удобно узнать всё, что доступно в шаблоне Есть решение

На каждом шаблоне доступны много переменных. Я могу увидеть их через {debug} в дебажной консоли смарти. Там я не вижу доступных для каждой переменной (объекта) методов, но и здесь я нашёл решение: {get_class_methods($wa->hub)}, например. (вроде сходится, я смог увидеть staff() к примеру)

Можно делать |@debug_print_var |@var_dump |@print_r. Но это всё такой геморой и так неудобно. Можно же сделать какую-нибудь волшебную команду {wa_debug}, которая помимо списка объектов, покажет ещё и доступные методы и типы параметров и возвращаемых значений (если в php есть типы =)

Или вообще чтобы мне не приходилось портить живой фронтенд, бэкенд может узнать, что будет передаваться странице этого типа, возможно сэмулирует рендер такой страницы и получит реальные полные данные, как {debug}, только видные из бэкенда при редактировании шаблона. Не только список полей, но и доступных методов, их сигнатуры.

Т.е. в данный момент я работаю чрезвычайно неэффективно. Судя по тому, какой классный продукт у вас получился, вы работаете не так. У вас должен быть какой-то способ узнать, что где доступно, что есть что и так далее. Я был бы признателен, если бы вы поделились знаниями.

2 ответа

  • 2
    Алексей Webasyst 23 апреля 2015 04:01 # Решение

    Можно использовать скрытое поселение с отдельной темой и можете портить сколько надо.
    Есть еще приложение Разработка, доступная в github, удобное для отладки отдельных блоков.

  • 4

    Чтобы посмотреть данные, я использую wa_dump() и всем рекомендую:

    {wa_dump($something, $something_else)}
    или
    {$something|wa_dump}

    Она совмещает в себе плюсы print_r (человекочитабельная структура) и var_dump/var_export (можно отличить строку от числа, NULL от пустой строки и false и т.п.). Плюс бесплатные бонусы типа оборачивания в <pre>.

    Иногда бывает полезным {wa_tpl_vars} - когда я не помню названия переменной и хочу посмотреть все переменные в шаблоне.

    Чтобы получить методы, я напрямую смотрю исходники хэлперов. $wa->hub, например - это класс hubViewHelper, который живёт в wa-apps/hub/lib/classes. Узнать имя класса помогает всё тот же wa_dump(), найти файл - примитивный поиск по коду. В моём редакторе открыть файл, зная имя класса - это пара нажатий кнопок.

    Во время разработки - и PHP, и Smarty - совершенно бесценную помощь оказывает приложение developer. Фронтэнд он эмитировать не умеет, но часто это не имеет значения. Когда имеет, я создаю тестовую страницу в Сайте и играюсь в ней.

    Вот и все лайфхаки. Ничего лучше, увы, не знаю.

    • +2

      Забыл. Бывает wa_dump() - она вызывает exit и после неё ничего не выполняется. И бывает wa_dumpc() - то же самое, но exit не делает.

    • +1
      Dima Stefantsov Dima Stefantsov 24 апреля 2015 05:36 #

      Чтобы получить методы, я напрямую смотрю исходники хэлперов. $wa->hub, например - это класс hubViewHelper"
      До вчерашнего дня у меня не было доступа к репозиторию. Для следующего поколения: там в приватном репозитории, куда нужно попроситься, сразу не только исходники Shop-Script, но и Hub.

      "Во время разработки - и PHP, и Smarty - совершенно бесценную помощь оказывает приложение developer."
      По совету Алексея начал использовать его, целый день там просидел. Действительно классно. Must have.

      Вы же сотрудник Webasyst, мне кажется намного удобнее было бы запускать там по Ctrl+Enter, а не тянуться к альту (который на моём ноутбуке например вообще только один и слева). Кроме того, там стоит хук на .keyup, то-то я думаю почему у меня не всегда нажатия проходят - а это просто надо отпускать клавиши по порядку! Возможно там у вас какой-то глубокий смысл, я его не нашёл и исправил:

      \wa-apps\developer\js\coding-sandbox.js

      // Callback for Codemirror to ignore Ctrl+Enter
      var onKeyEvent = function(editor, e) {
      e = new $.Event(e.type, e);
      if (!e || !e.which) {
      return;
      }
      if (e.which == 13 && e.ctrlKey) {
      return true; // prevents codemirror default action
      }
      };

      // Run on Ctrl + Enter
      $(document).keydown(function(e) {
      if (!e || !e.which) {
      return;
      }
      if (e.which == 13 && e.ctrlKey) {
      $('#send').click();
      return false;
      }
      });

      Теперь ещё удобнее! Надеюсь вольёте это в репозиторий.

      Спасибо за помощь!

      • +2

        Мне пришлось сознательно отслеживать свои действия в девелопере. Так вот, оказалось, что я как раз и держу левый альт свободной рукой, а не давлю правой рукой две кнопки. И вопросов про далеко тянуться никогда не возникало...

        Я помню, почему там стал альт. Раньше там было три вкладки: PHP, Smarty, Result. Переключение между вкладками было Alt+1, Alt+2, Alt+3, и контрол нельзя, потому что Ctrl+число переключает вкладки браузера. А выполнение Alt+Enter просто за компанию, всё равно альт по сути не отжимаешь. Потом три вкладки объединили в одну, и эта причина стала неактуальна. Но была и ещё одна. Мысль сделать Control+Enter потянула за собой мысль "вот блин, а на маках придётся cmd тогда делать". При прочих равных между альтом и контролом победил альт. А прямо сейчас мысль сделать контрол тянет за собой "вот блин, теперь придётся не только контрол и cmd делать, но и альт оставить, иначе рефлексы у людей сломаются". Вот так вот лень побеждает))

        Почему там keyup, я тоже помню. Потому что при прочих равных по сравнению с keydown, keyup позволяет передумать и НЕ выполнять код, даже если успел нажать Enter. Чем я лично иногда пользуюсь.

        Вышесказанное, конечно, не мешает вам модифицировать Developer под свои вкусы, хоть весь его переделайте :)

        • +1
          Dima Stefantsov Dima Stefantsov 24 апреля 2015 06:12 #

          Понятно, что можно передумать. Но это ж дебаг, там не код на 3 часа выполнения, там "отменить" в принципе не надо. Если случайно нажал лишний раз - фиг с ним, через секунду нажму ещё.

          Это нестандартное поведение. Поведение на keyup в стандартных интерфейсах я видел только для мышки. Для сочетаний клавиш на клавиатуре всегда на keydown, попробуйте Alt+F4, что угодно.

          Про альты подробно, спасибо. А jQuery ctrlKey не включает в себя маковскую cmd? Ну написать там тогда || cmdKey что-нибудь такое.

          Обратная совместимость важна. Раз альт никому не мешается, его действительно нужно оставить.

          Не зря во всех IM клиентах существует отправка или по Enter или по Ctrl+Enter. Потому что это самое удобное сочетание. Это как Alt+F4, Ctrl+Alt+Del, Esc: оно зашито у большинства. Сделал дело - нажал Ctrl+Enter, одной рукой! Может быть второй я голову поддерживаю =)
          Так что в дополнение к альту стоит сделать и возможность использовать Ctrl. Сделать - громко сказано. Дописать || ctrlKey.

Добавить ответ

Чтобы добавить комментарий, зарегистрируйтесь или войдите