Безобразный 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!» 😉

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

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

Я испробовал приличное множество систем визуального редактирования, и безусловно о каждой из них у меня сложилось определённое впечатление: как хорошее, так и плохое.

В рамках данного проекта я испробовал три системы визуального редактирования, которые, безусловно, достойны внимания, и будут рассмотрены в данной статье. Это следующие программы: TinyMCE, WYM Editor, HTMLArea.

Ну конечно в один ряд эти программы ставить нельзя, хотя бы по их функционалу и назначению. Это было бы равносильно сравнивать возможности встроенного редактора Notepad и коммерческого Microsoft Word. Ведь каждая эта программа особенная, и относится к определённому классу. Посему сегодня мы поговорим именно о ней.

Сказание о TinyMCE

Ну, эта программа, по моему мнению, занимает почётный пьедестал первенства на рынке подобных продуктов, так как обладает наиболее функциональным интерфейсом, "портативностью", ассоциативностью, и при всё при этом - относительной скоростью. Но сказать это, означает не сказать ровным счётом ничего, так как этими поверхностными похвалами нельзя раскрыть все её достоинства, среди которых: наиболее проработанный среди всех вышеперечисленных систем API-интерфейс, простота и понятность, дововольно быстрое время обработки (учитывая уровень и качество производимых системой действий), ну а так же качество обработки внешних данных. К примеру, вы можете просто скопировать текст из документа Word, и при правильной настройке, система транслирует его в очень и очень похожем формате, при относительной чистоте кода, который соответствует стандартам, что выдвигает главный законодатель мод в WWW - W3C. Но, безусловно, не бывает мёду без дёгтя, и в этом случае есть свои минусы. Среди них неработоспособность на браузерах Opera заканчивая 8.4, на которых система вообще не будет работать. Ну и, конечно, учитывая все её возможности и мультиброузерность, на выходе мы получаем довольно объёмный исходный код, а именно 1,9 МБайт, но я считаю, что размер окупает себя сполна.

Итак, допустим, у вас есть некоторый документ form.html, в котором содержится некоторая форма, с полем TextArea. Но как его сделать WYSIWYG-типа?

Да очень просто, для этого вам сначала необходимо подключить основной класс TinyMCE, после чего в документе автоматически станет доступным прототип объекта TinyMCE, который и является основным API-интерфейсом системы, через который происходит общение с программой, и её настройка.

Давайте рассмотрим простейший случай применения программы, на примере документа с формой и элементом TextArea:

Листинг 1.1

Первый пример Некоторый элемент TextArea

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

Но давайте поговорим сначала о параметрах, которые мы в данном случае передаём в метод инициализации класса - init().

Мы передаём в качестве параметра некоторый хеш, в котором значение элемента mode соответствует "textareas", а элемента theme - "simple". Элемент `mode` означает метод "замены" стандартных текстовых полей (textarea), на WYSIWYG. Он может принимать значения "textareas" , "exact" и "specify_textareas".

В случае "textareas" мы даём команду редактору преобразовать все элементы TextArea в редактируемые элементы. В остальных случаях мы манипулируем определенным полями для редактирования, идентификаторы которых необходимо перечислить в качестве значения элемента elems, через запятую.

В свою очередь элемент "theme" означает ничто иное, как текущий тип оформления редактора и может принимать значения: "simple" и "advanced".

В нашем случае, когда мы используем тип "simple", мы подключаем исключительно стандартные функции редактора, и при этом не может особо менять его функционал, как я уже говорил - это вполне сгодится для малых проектов, а так же для тех, в которых необходима высокая скорость соединения.

Теперь давайте рассмотрим работу с редактором во время включённого режима темы "advanced".

В этом случае мы имеем гибкий в редактировании интерфейс, полное редактирование всех используемых редактором функций, а так же ещё несколько моментов.

Что ж, допустим, вы начали проект некоторого электронного журнала или Интернет-издания, в котором принципиальной является возможность создание статей со стороны администрации. При этом следует учитывать, что интерфейс программы должен быть как можно более схожим с привычным для нас интерфейсом наиболее используемого Word"а, а так же иметь достаточное количество функций для воплощения всех идей редактора относительно форматирования текста статьи, и никогда не должно возникать таких вопросов как: "А куда нужно нажать?", "А почему оно не показывает:.", "А куда делся весь текст":

Для более редкого возникновения подобных вопросов (но ведь от них никуда не деться:) мы сейчас немного изменим, текущий вариант редактора и добавим следующие функции:

  • Автоматическое форматирование вставляемого текста
  • Добавим функции форматирования
  • Изменим расположение панелей управления
  • Зададим язык редактора
  • Добавим проверку орфографии
  • Что ж, давайте обсудим точнее, что мы хотим увидеть в редакторе:

  • Панель форматирования находится сверху
  • Панель состояния отсутствует
  • Язык редактора - русский
  • Функции форматирования: полужирный, курсив, подчёркивание, шрифт, размер, стиль текста, цвет, заливка.
  • Функции структурного форматирования: таблица, выравнивание, табуляция, список
  • Дополнительные функции: вставка изображения, вставка, предпросмотр, вставка гиперссылки, функции "отката" и "возврата", ну и, наверное, введём печать.
  • Что ж, формализация задания есть, теперь давайте решим, как мы будем это воплощать в жизнь.

    Для воплощения функции авторформата вставляемого извне текста необходимо указать параметр хеш-списка - "paste_auto_cleanup_on_paste", который принимает в качестве значения булев (true || false), и в зависимости от этого форматирует или нет внешний текст, переданный из буфера обмена.

    При использовании данного параметра следует так же использовать и следующие параметры:

    Paste_convert_headers_to_strong: (true | false), paste_strip_class_attributes: "all", paste_remove_spans: (true | false), paste_remove_styles: (true | false)

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

    Существует два вида панелей, а именно: панель инструментов (toolbar) и панель состояния (statusbar).

    На первой панели размещаются функциональные кнопки, а так же другие средства для форматирования и редактирования текста.

    Каждая из этих панелей может иметь своё положение (снизу или сверху), то есть у нас есть возможность довольно гибко менять их положения в редакторе. Для этого можно воспользоваться параметрами:

    Theme_advanced_toolbar_location: (top | bottom | none), theme_advanced_statusbar_location: top | bottom | none)

    При этом в зависимости от значения параметра и будет установлено конечное положение панели, или если параметр стоит в значении "none", то панель вообще не будет отображена.

    И ещё, панель инструментов имеет такой параметр как выравнивание, в соответствии значения которого, и будет центрированы элементы панели. За центрирование элементов отвечает параметр theme_advanced_toolbar_location, и может принимать стандартные значения: center, left, right (по-умолчанию установлен параметр center).

    Итак, с панелями разобрались, но ведь на них следует добавить что-то?

    Ведь по-умолчанию он будут просто пустовать, с минимальным набором значений, на ведь не нужен такой редактор?

    Для размещения, элементы, или же другими словами - кнопки, должны разбиваться на несколько категорий, в каждой из которых могут находиться элементы (не)разделённые знаком разделителя. Для абстракции групп в программе используется понятие кнопок, и для задания группы в качестве значения параметра theme_advanced_button(n+1), где n-текущий номер группы, задается набор элементов, которые к ней должны относится.

    Хотя про набор вы можете, особо не беспокоится, так как по-умолчанию в панели инструментов вы и так сможете найти стандартный набор необходимых функций выравнивания, форматирования и прочего, но это доступно лишь в режиме темы "advanced".

    Для задания языка редактора нужно всего лишь добавить параметр "language" со значением "ru".

    Что ж, давайте посмотрим, что вышло у меня:

    Листинг 1.2.

    TNT43 Visual Editor tinyMCE.init({ mode: "textareas", theme: "advanced", language: "ru", plugins: "table,save,advhr,advimage,advlink,insertdatetime, preview,zoom, searchreplace,print,contextmenu,paste,directionality ", theme_advanced_buttons1_add_before: "save,newdocument,separator", theme_advanced_buttons1_add: "fontselect,fontsizeselect", theme_advanced_buttons2_add: "separator,insertdate,inserttime,preview,zoom,separator, forecolor,backcolor", theme_advanced_buttons2_add_before: "cut,copy,paste,pastetext,pasteword,separator", theme_advanced_buttons3_add: "advhr,separator,print,separator,ltr,rtl,separator ", theme_advanced_toolbar_location: "top", theme_advanced_toolbar_align: "left", theme_advanced_statusbar_location: "bottom", plugi2n_insertdate_dateFormat: "%Y-%m-%d", plugi2n_insertdate_timeFormat: "%H:%M:%S", theme_advanced_resizing: true, theme_advanced_resize_horizontal: false, paste_auto_cleanup_on_paste: true, paste_convert_headers_to_strong: false, paste_strip_class_attributes: "all", paste_remove_spans: false, paste_remove_styles: false });

    Вот - это и весь код. Он выглядит довольно громоздко, но в целом довольно прост для понимания.

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

    Плагины - некоторые внешние модули, которые необходимы для воплощения тех либо иных функций программы. Плагины размещаются в папке `plugins`, откуда подключатся к программе в момент вызова. Для использования плагинов в программе, их сначала необходимо перечислить через запятую, в качестве параметров элемента `plugins`, после чего добавить соответствующую кнопку на панель, для их использования.

    Так же в рамках примера в листинге 1.2, мы использовали плагин inserdate, для котрого позже задали параметр dateFormat и timeFormat, которые вводят формат используемого времени и даты, соответственно. Они задаются в соответствии со спецификацией функции временных меток.

    Так же стоит упомянуть другие интересные функции, использованные в примере:

    • paste_remove - при режиме true, редактор фильтрует все поступившие из буфера обмела данные, и удаляет контеинеры spaи.
    • paste_convert_headers_to_strong - при режиме true, редактор изменяет все заголовки (h1,h2,h3,h4,h5,h6) в буффере обмена на элементы
    • paste_auto_cleanup_on_paste - фильтр для данных из буфера обмена (применимо к данным из MS Word)

    Вот, по-моему, для общего обзора системы хватит. Однако мы ещё не рассмотрели довольно большое количество методов API-интерфейса, без которых часто очень сложно представить себе работу с редактором. Но обещаю, что мы рассмотрим их в следующих выпусках МК.

    Мы с Вами уже . И теперь я решил затронуть тему работы с каталогами в PHP . В этой статье Вы научитесь создавать каталоги в PHP , удалять их и считывать из них файлы и подкаталоги.

    Начнём с самого простого: создание каталога в PHP :

    После запуска этого скрипта у Вас будет создан пустой каталог "new_dir ".

    Удалить пустой каталог очень просто. Для этого используется функция rmdir() .

    А вот теперь перейдём к работе с содержимым каталогов через PHP . Здесь есть очень простые правила, которые необходимо соблюдать. Все эти правила очень логичны, и Вы их применяете, когда вручную просматриваете содержимое каталогов:

  • Открыть каталог.
  • Считать содержимое.
  • Закрыть каталог.
  • Чтобы не мучить Вас в ожиданиях, сразу приведу код, который выводит имена файлов и категорий внутри заданного каталога:

    В результате Вы увидите список всех файлов и каталогов внутри каталога "images ". Также Вы увидите два интересных имени ". " и ".. ". Первый означает "текущий каталог ", а ".. " - родительский.

    Теперь подробно о функциях, используемых в этом примере:

    • Функция opendir(string $path) - открывает каталог, находящийся по пути $path , а также возвращает дескриптор, необходимый для работы с этим каталогом.
    • Функция readdir(resource $dir) - считывает текущий элемент в каталоге dir . Текущий элемент задаётся указателем, который сдвигается при каждом вызове. Поэтому получается, что каждый раз эта функция возвращает новый элемент из каталога. Когда все элементы закончились, то функция readdir() возвращает false .
    • Функция closedir(resource $dir) - закрывает каталог dir .

    Это все самые важные функции для работы с каталогами в PHP . Однако, хочется добавить ещё одну очень важную деталь по поводу функции rmdir() , которая удаляет каталог. Если Вы внимательно читали, то я написал, что эта функция удаляет "пустой каталог ", то есть в котором нет ни одного файла и каталога (кроме ". " и ".. "). Другими словами, если в каталоге будет хотя бы один файл, то функция rmdir() не сработает . Вот как решить эту проблему Вы узнаете в следующей статье, поэтому подписывайтесь на обновления, чтобы не пропустить её появление.





    

    2024 © gtavrl.ru.