Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Другие движки / фрейморки > Библиотека скриптов |
Автор: IZ@TOP 5.3.2005, 12:21 | ||||
Меня посетила интересная идея, многие наверное пишут небольшие библиотечки для себя, кого-то еще. Предлагаю в данной теме делиться тем что у нас есть и обсуждать какие-то недоделки замеченные в чужих скриптах. Давать советы по оптимизации. Может быть даже напишем пару библиотек совместно, если конечно идеи будут. Вот для начала мой скриптик класса для работы с MySQL:
И пример использования:
|
Автор: skalex 9.3.2005, 17:38 |
Прошу прощения, но на мой взгляд это совсем не абстрактный класс, а как раз драйвер (как и указано в исходном коде). Только почему тогда приведенный класс имеет имя db ? Более логично было бы назвать его например db_mysql. Пара соображений на этот счет: 1. ИМХО абстрактный "класс" для работы с БД должен иметь 2 статических метода (для соединения/отсоединения) и набор драйверов (mysql.php, oracle.php, postgre.php и т.д.), где соответственно реализуются интерфейсы к каждой БД. Подключение/отключение тоже производится через драйвер. Просто из статического метода абстрактного класса вызывается соответствующий метод указанного драйвера. 2. Параметры подключения передавать не аргументами, а строкой типа "mysql://user:password@host:port/database". ИМХО это удобнее и красивее ![]() Есть еще пара идей... ![]() |
Автор: IZ@TOP 9.3.2005, 17:55 | ||
Mace, ты прав, я немного ошибся в определении значения слова "абстрактный". Надо будет доработачку внести.
Точно, это мне больше нравится. |
Автор: Irokez 9.3.2005, 19:03 |
было бы неплохо если бы в классе можно было управлять выводом ошибок, к примеру ввести дополнительную переменную - $showErrors, при откладки и тестировании сайта можно установить ей истинное значение и класс будет выводить ошибки, а когда уже запускаем сайт, то "выключаем" вывод ошибок, посетителям не обязательно знать какие запросы отсылются в базу .. |
Автор: IZ@TOP 10.3.2005, 11:37 |
Irokez, в общем на самом деле может и не стоит, просто с данным классом, если его правильно использовать, SQL инъекции исключены. Хотя всегда вариант "дыр" в основном коде остатся. |
Автор: Opik 11.3.2005, 00:58 |
IZ@TOP Я бы добавил 2 аргумента в getResult - limit 1, 2 думаю ты меня понял... |
Автор: IZ@TOP 11.3.2005, 13:06 |
Opr, да, в общем то я хочу разбивку сделать по страницам встроенную. А в getResult limit по моему не нужен. Если уж куда и ставить, то в запрос. |
Автор: Opik 15.3.2005, 16:45 |
IZ@TOP аха ![]() ![]() |
Автор: IZ@TOP 29.4.2005, 08:17 | ||||||||||||||||||||||||||||||||||||||
Вот и выкладываю свой шаблонизатор. Инструкция к шаблонизатору execTemplates 1. Загрузка документа.
Заметим так же что инициальизировать класс можно без назначения шаблонов:
После чего подгрузку шаблона можно произвести с помощью метода setTemplate, передавая ей аргументы по аналогии с execTemplates. Назначить рабочий каталог можно с помощью метода setWorkPath.
2. Назначение подстановочных перенменных шаблона Есть несколько способов назначения переменных шаблона, они делятся на две группы: глобальные и передаваемые в тело функции. Глобальное назначение переменных выглядит так:
При таком способе нужно учитывать что переменные назначаются из глобального массива ($GLOBALS). Назначение переменных путем передачи в тело функции:
Передача глобальных переменных из массива:
Передача глобальных переменных из массива с добавлением префикса:
Точно так же можно назначать переменные внутри функции/метода класса, передавая переменную непосредственно в тело вызова метода assign (вместо false). И так, как же выглядит шаблон в котором будут заменен текст из примеров? Синтаксис записи шаблонных перменных очень прост.
3. Работа с циклами Составляем шаблон и обрабатываем его. Например у нас есть одномерный массив, который нужно вывести в HTML код:
Чтобы зарегестрировать этот массив в шаблоне для обработки в цикле, можно поступить несколькими способами:
Шаблон для исполнения цикла должен выглядеть следующим образом:
Думаю в дополнительных комментариях данный код не нуждается и всем понятно что <loop @myArray> это начало перебора массива $myArray в цикле. Что же если нам, например, понядобится обработать многомерный массив? Все очень просто:
Соответсвенно, чтобы наш массив обработался в шаблоне, нам нужно чуток изменить наш шаблон:
Думаю что с этим делом понятно. Теперь давайте разберемся с дополнительными возможностями при использовании циклов.
Интересно, чтоже значат все эти -m -f и т.п. ![]() Разъясняю: Опция -m дает знать обработчику что массив многомерный. Опция -f func_name %void означает что в цикле необходимо выполнять функцию, чье имя и стоит после этой опции... еще один параметр который играет роль при исполнении данной процедуры, это тип выполнения цикла. В данном случае это %void - что значит что функция будет исполнена и больше ничего. Есть и другие: %rv - исполняет функцию и заменяет в шаблоне цикла директиву <!--exec.func_name--> на результат выполнения функции. %ra - исполняет функцию аналогично предыдущему способу, но передает в нее текущий элемент массива. %ia - исполняется функция с передачей текущего элемента массива но без замены возвращенного ею результата. %void - обыкновенное исполнение функции (может кому пригодится, хотя я в этой опции необходимости невижу). Опция -i 100 начинает отсчет %{i} директивы со 100 Оация -b #CCCCCC:#ECECEC подменяет поочередно %{break} #CCCCCC и #ECECEC, таким образом у нас получается разноцветные строки в таблице. Опция -d empty_loop записывает на место шаблона цикла значение из $GLOBALS['empty_loop'] в случае если в нем не содержится данных. Существует так же опция -l filename.tpl, которая загружает тело цикла из отдельного файла. 4. Напоследок об условиях В данной версии шаблонизатора реализован механизм обработки простых условий без вложенности if/else. Пример шаблона:
Данные в if могут быть трех типов: @example - будет подставлена переменная example из массива $GLOBALS. $example - будет взята переменная из назначенных данных для условий:
И наконец %example будет интерпретировна как простая строка. 5. Инклуд файлов Директивы
filename.php, а директива
который назходится внутри файла filename.txt. 6. Компиляция шаблона Для компиляции шаблона используется следующая функция которая запускает обработчики:
Первый аргумент говорит интерпретатору о необходимости замены переменных шаблона, второй о необходимости исполнить циклы, третий аргумент обозначает необзходимость обработки условий и четвертый соответственно дает знать что нужно искать в шаблоне директивы исполнения файлов. Примечание. К сожалению у меня сейчас нету времени описать все возможности шаблонизатора, думаю если Вы поковыряетесь в коде, то разберетесь в том что там есть еще. Класс шаблонизатора находится в прикрепленном файле. |
Автор: fara 24.5.2005, 19:42 |
Предлагаю здесь разработать универсальный класс управления всеми возможными ошибками Назовем его ессно как нить ErrorHandler |
Автор: IZ@TOP 24.5.2005, 20:30 |
fara, почему бы и нет! Какова будет его структура и функционал? |
Автор: fara 24.5.2005, 21:27 | ||
IZ@TOP видел я один довольно приятный на чтение код в CMS Seagull... Предлагаю писать его как класс class ErrorHandler { ... } Что может делать наш класс: 1. записывать в журнал ошибки указывая род (тип) ошибки 2. возможность отправки на мыло серьезных ошибок Производить debug при отладке скриптов. Собсно осталось писать код ![]() Я над этим немного подумаю и выставлю че получилось. Добавлено @ 21:32
|
Автор: Irokez 12.6.2005, 17:14 | ||
Работая на локальной машине, часто возникает проблема с функцией mail, т.к. естесственно без почового сервера письмо никуда не идет. Кажется в денвере есть заглушка, которая вместо отсылки письма, просто сохраняет письмо в папку в виде текстового файла. Но т.к. я не сторонник денвера, решил написать свою заглушку, получилось весьма удобно:
т.е. в своем проекте вместо функции mail() можно пользоваться этой email(), которая принимает такие же параметры, как и mail(), функция будет сохранять "отправленные" письма в папке $email_dir, в папке названной именем почтового адреса куда отсылается письмо, с заголовком первого слова темы письма или с таким же названием + (цифра) если такое письмо уже отправлялось ранее |
Автор: Elfet 4.1.2006, 14:07 |
Мод наград для IPB 2.1.х ![]() ![]() |
Автор: CyClon 14.1.2006, 14:04 |
Elfet, а что он может. У юзера будут показыватся награды чтоли? |
Автор: kshyms 21.12.2006, 07:23 | ||
skalex
|
Автор: ImamMahdi 16.8.2007, 13:52 |
IZ@TOP, шаблонизатор хорошо описали, а вот в самом коде не единого комментария - плохо Да и проверсию пхп на которой он будет работать, тоже ни слова. |
Автор: rosimk 6.3.2008, 14:33 |
Модератор: Сообщение скрыто. |
Автор: Uleeek 22.12.2008, 20:27 |
Модератор: Сообщение скрыто. |
Автор: Uleeek 23.12.2008, 14:20 |
Модератор: Сообщение скрыто. |
Автор: pussyspb 10.9.2011, 10:36 |
Вроде бы раздел называется библиотека скриптов, а ничего полезного нету ((( |