Багряный edit catalog php. Правильный редактор для PHP. И вот оно
Иногда очень сильно не хватает какого-то хорошего редактора для PHP именно с точки зрения комфортной работы с кодом, что-то посерьезней, чем простая подсветка синтаксиса. При этом обычных редакторов пруд пруди, в которых, к сожалению, та же подсветка синтаксиса далеко не всегда корректно работает.
Хочется иметь нормальную реализацию IntelliSense, а не «деревянную» пародию на него в виде заранее определенного списка методов и констант языка, «вываливающегося» во время работы по поводу и без повода в виде полного списка. IntelliSense обязательно должен «знать» о всех используемыми вами классах, о их методах и переменных, то есть подключил через #include файл с определением своего класса, и редактор сразу же его подхватывает, подсказывая информацию о всех «внутренностях» объектов этого класса.
Не помешали бы так же подсказки во время набора названия функции в виде краткого описания функции (принимаемые параметры, есть ли перегруженные функции и т.п.). Особенно этого не хватает для самописных функций, в некоторых типичных редакторах я видел такие подсказки, но только для родных функций PHP. Ах да, еще очень удобно быстро переходить к определению функции из места ее вызова. Вообще, много чего еще хочется, причем все эти возможности считаю лишь толикой самых необходимых вещей в процессе кодинга и никак не излишеством…
Можно сказать, что в этом смысле моим идеалом является связка MS Visual Studio + Visual Assist , которую я использую при работе с C# и C++ (Visual Assist в этой связке просто как спасательный круг). Когда лишний раз не лезешь в другие файлы, чтобы посмотреть принимаемые параметры функции или названия тех или иных членов класса, это в любом случае способствует производительности и «приятности» процесса. Отсутствие среди своего инструментария такого редактора очень удручает, учитывая все большую (от версии к версии) объектно-ориентированность PHP.
И вот оно!
Все же нашел для себя достаточно неплохой редактор — . Если вы, как я, пользовались обычными редакторами, заменяющими стандартный «блокнот» и тоже жаждали человеческого IntelliSense, советую обязательно попробовать его. Он ко всему еще и бесплатный (о платной версии ниже) и работает на базе мозиловского фреймворка (XPFE), что делает его так же мультиплатформенным.
Этот редактор не идеал, в нем много хорошего, при этом, конечно же, ему есть куда еще развиваться. Но, в целом, в первые дни знакомства с ним у меня не было предела радости 🙂
Стоит так же отметить поддержку и других языков (Perl, Python, Ruby, Tcl), а так же JavaScript, CSS, HTML, XML и много другого (судя по списку файлов, которые он может открыть, он знает еще много языков и технологий, но не уверен насчет работы IntelliSense для них всех). Приятно удивила поддержка многих популярных фрейворков для JavaScript (для это было кстати).
Я наверняка еще не успел изучить весь функционал Komodo Edit, но некоторые моменты хотел бы описать.
Первым делом я настроил под себя цветовую схему подсветки кода для PHP (Edit -> Preferences… -> Fonts and Colors ), так как привык уже к цветам из .
Так же полезным дополнением оказался плагин , который находит все TODO в открытом проекте или файле и выводит их в один список (на подобие того, как это реализовано в VS). И плагин, позволяющий видеть в виде одного списка все классы и методы, определенные в открытом файле () для быстрой навигации по ним.
Вообще перед использованием Komodo имеет смысл изучить его настройки, изменив те или иные параметры под себя. Я, к примеру, еще переопределил горячую клавишу для перехода к определению функций (сделал F12, как в Visual Studio 🙂).
В целом все работает достаточно хорошо, «земля и небо» по сравнению с кодингом в обычном редакторе.
Немного неудобно, что для полноценной поддержки IntelliSense обязательно нужно создавать файл проекта (его нужно просто сохранить в корневой каталог сайта). То есть если открыть один файл вне рамок проекта Komodo, все инклуды, прописанные в нем, не будут обрабатываться как-либо, и, соответственно, Komodo не будет ничего знать о функциях и классах, определенных в подключаемых файлах. Но, в целом, это маленькое неудобство пережить можно 🙂
С другой стороны, создание файла проекта дает возможность выполнить более тонкие настройки проекта, которые сохраняются и при каждом открытии проекта, Komodo будет помнить о них. Через него, к примеру, можно указать дополнительные директории для того, чтобы Komodo при работе с вашим проектом все время имел ввиду структуру классов и методов (для IntelliSense и различных подсказок), реализованных в файлах, которые лежат в подключаемой директории, даже если эти файлы ни как фактически не подключены (через include или require) к редактируемому файлу. Еще можно производить поиск или замену текста во всех файлах проекта. Так же, Komodo запоминает сделанные вами закладки внутри кода (Ctrl+F2 ) для каждого файла, это очень удобно.
Немного неприятно удивило, что Komodo Edit ничего не знает о встроенных в PHP классах (может, я делаю что-то не так?). К примеру, если нужно использовать класс mysqli:
$mysqli = new mysqli(HOST, USER, PASS, MBASE); if (mysqli_connect_errno()) { print "Connect failed: ".mysqli_connect_error(); exit(); } $mysqli->query("INSERT......."); $mysqli->close();
Когда после написания слова «$mysqli» я начинаю обращаться к методам этого объекта (пишу знак «->»), Komodo Edit не хочет подсказывать ничего о методах query, close и т.д., а в строке состояния ругается, что, мол, в глаза не видел определения этого класса… При этом со встроенными в PHP функциями проблем нет, к примеру, о семействе функций mysqli_* (оберткой над которыми и является класс mysqli) Komodo прекрасно знает. Но, надеюсь, эту недоработку когда-нибудь поправят. Если же вы, к примеру, работаете с базой через свой класс — обертку (или через что-то вроде PEAR), то проблем с IntelliSense не должно возникать.
Один раз у меня случилось так, что при редактировании js файла Komodo не понял, какой Java Script фреймворк я использую. Но это, к счастью, всегда можно поправить в его настройках (Edit -> Preferences… -> Code Intelligence ).
Существует платная версия Komodo, называемая Komodo IDE . Как я понял, основное отличие от Komodo Edit в функциях, свойственных многим IDE . Комодо IDE имеет встроенные инструменты для работы с системой управления версиями (SVN) и отладчик кода.
Кстати, в Komodo Edit все же есть примитивный отладчик, который на ходу уведомляет о таких мелких ошибках, как забытая точка с запятой в конце строки, незакрытая скобка и т.п. Такие ошибки он подчеркивает красной волнистой линией. Для того, чтобы такая отладка работала, нужно в настройках программы указать путь к исполняемому файлу PHP и php.ini (Edit -> Preferences… -> Languages -> PHP ).
Как видно, подобные настройки можно проделать и для всех остальных языков.
Послесловие
Komodo Edit теперь мой повседневный инструмент 🙂 Плюс, для коротких правок каких-то мелочей в эпизодических случаях я продолжаю использовать аналог продвинутого блокнота — Notepad++, то есть использую его по своему настоящему назначению.
До Komodo Edit я еще пробовал интересный плагин к Visual Studio, который называется VS.Php . Он встраивается в Visual Studio и позволяет работать с PHP так же, как, к примеру, с C# (можно отлаживать код, работает IntelliSense и т.п.). Но как-то он не особо впечатлил, особенно на фоне своей платности. К тому же, как я понял, работая в нем можно полностью забыть про поддержку Java Script и т.п. Интересно еще то, что в нем точно так же, как в Komodo, не работает IntelliSense для классов, встроенных в PHP. Так же этот VS.Php конфликтует с Visual Assist.
Есть еще два подобных редактора, о которых я слышал, но как-то не случилось их попробовать (дальше лишь ИМХО и догадки на основе «слухов»):
- Zend Studio – платный, по отзывам сложилось впечатление, что это нечто громоздкое и применимо в первую очередь ну в очень больших и сложных проектах, особенно он уместен, возможно, если проект создается на основе Zend Framework.
- Eclipse – бесплатный, но отпугнул, скорее всего, своей «накрученностью». Как я понял, его еще нужно уметь собрать под себя из различных модулей. В общем, как-то не возникло желания разбираться с тем, как его установить и настроить (но в свое время я все же пытался немного 😉), хотя, несомненно, кому-то он может очень нравиться.
***
Если кто-то посоветует какие-нибудь еще редакторы с оглядкой на мои «придирчивые» вкусы, буду очень благодарен. Так же было бы интересно услышать о каких-то дополнительных интересных особенностях Komodo от тех, кто им уже пользуется.
В общем, долой примитивную подсветку кода с вагоном ненужных функций! Это «наболевший» камень в огород постоянно появляющихся простых редакторов кода, выставляющих на передний план среди своих «достоинств» встроенный проводник по файловой системе или что-то вроде мини редактора/вьювера базы данных (ну зачем это нужно, если нет самых важных вещей именно для того, для чего изначально предполагается использовать редактор кода) и т.п. и т.д.. Почему-то почти каждый начинающий (хотя, может, не всегда начинающий) программист хочет «быстренько» сделать свой «мега» редактор, который часто вырождается в «опять что-то до боли знакомое»… очевидно, это традиция из серии «Hellow World!» 😉
Компонент служит для редактирования результатов заполнения веб-форм.
При его использовании в сочетании с компонентом Список результатов значение поля RESULT_ID можно оставить по умолчанию. Если же компонент используется самостоятельно, то необходимо определить откуда компонент должен брать значение параметра RESULT_ID или задать его явно. Компонент стандартный и входит в дистрибутив модуля.
В структуре визуального редактора компонент расположен по пути Сервисы > Веб-формы > Редактирование результата .
Компонент относится к модулю Веб-формы .
Настройки, определяющие права групп пользователей на редактирование результатов устанавливаются в настройках каждой из веб-форм, а в случае работы в расширенном режиме также в настройках статусов.
Пример вызова компонента form.result.edit |
---|
$APPLICATION->IncludeComponent("bitrix:form.result.edit","",Array("SEF_MODE" => "Y", "RESULT_ID" => "$_REQUEST[\"RESULT_ID\"]", "EDIT_ADDITIONAL" => "N", "EDIT_STATUS" => "Y", "LIST_URL" => "result_list.php", "VIEW_URL" => "result_view.php", "CHAIN_ITEM_TEXT" => "", "CHAIN_ITEM_LINK" => "", "IGNORE_CUSTOM_TEMPLATE" => "Y", "USE_EXTENDED_ERRORS" => "Y", "SEF_FOLDER" => "/", "SEF_URL_TEMPLATES" => Array("edit" => "#RESULT_ID#/"), "VARIABLE_ALIASES" => Array("view" => Array(), "edit" => Array(),)),);?> |
Секции настроек компонента:
Описание параметров
Поле | Параметр | Описание |
Источник данных | ||
---|---|---|
ID результата | RESULT_ID | Указывается идентификатор результата заполнения формы. По умолчанию указано $_REQUEST["RESULT_ID"] , но также может быть записан php-код, возвращающий RESULT_ID . |
Внешний вид | ||
Игнорировать свой шаблон | IGNORE_CUSTOM_TEMPLATE | При отмеченной опции для отображения веб-формы будет использоваться шаблон формы по умолчанию, даже если создан свой шаблон. |
Использовать расширенный вывод сообщений об ошибках | USE_EXTENDED_ERRORS | При отмеченной опции будет использован расширенный вывод сообщений об ошибках. |
Управление адресами страниц | ||
Включить поддержку ЧПУ | SEF_MODE | При отмеченной опции будет включена поддержка ЧПУ. Если режим поддержки ЧПУ включен , то необходимо настроить следующие параметры: SEF_FOLDER , SEF_URL_TEMPLATES . |
Параметры компонента | ||
Выводить на редактирование дополнительные поля | EDIT_ADDITIONAL | При отмеченной опции будут выведены для редактирования дополнительные поля формы при их наличии. |
Выводить форму смены статуса | EDIT_STATUS | При отмеченной опции будет выведена форма смены статуса текущего результата. Статусы будут доступны в соответствии с правами пользователя. |
Страница со списком результатов | LIST_URL | Указывается адрес страницы со списком результатов. |
Страница просмотра результата | VIEW_URL | Указывается адрес страницы просмотра результата. |
Название дополнительного пункта в навигационной цепочке | CHAIN_ITEM_TEXT | Указывается название дополнительного пункта в навигационной цепочке. Если оставить незаполненным, то в навигационную цепочку пункт не добавляется. |
Ссылка на дополнительном пункте в навигационной цепочке | CHAIN_ITEM_LINK |