|
Модераторы: 2man |
|
IZ@TOP |
|
||||
Панда-бир! Профиль Группа: Участник Сообщений: 4795 Регистрация: 3.2.2003 Где: Бамбуковый лес Репутация: 3 Всего: 73 |
Меня посетила интересная идея, многие наверное пишут небольшие библиотечки для себя, кого-то еще. Предлагаю в данной теме делиться тем что у нас есть и обсуждать какие-то недоделки замеченные в чужих скриптах. Давать советы по оптимизации.
Может быть даже напишем пару библиотек совместно, если конечно идеи будут. Вот для начала мой скриптик класса для работы с MySQL:
И пример использования:
-------------------- Один из розовых плюшевых-всадников апокалипсиса... очень злой... Семь кругов ада для новых элементов языка Мои разрозненные мысли |
||||
|
|||||
skalex |
|
|||
Хороший человек Профиль Группа: Участник Клуба Сообщений: 895 Регистрация: 2.4.2004 Репутация: 2 Всего: 23 |
Прошу прощения, но на мой взгляд это совсем не абстрактный класс, а как раз драйвер (как и указано в исходном коде). Только почему тогда приведенный класс имеет имя db ? Более логично было бы назвать его например db_mysql.
Пара соображений на этот счет: 1. ИМХО абстрактный "класс" для работы с БД должен иметь 2 статических метода (для соединения/отсоединения) и набор драйверов (mysql.php, oracle.php, postgre.php и т.д.), где соответственно реализуются интерфейсы к каждой БД. Подключение/отключение тоже производится через драйвер. Просто из статического метода абстрактного класса вызывается соответствующий метод указанного драйвера. 2. Параметры подключения передавать не аргументами, а строкой типа "mysql://user:password@host:port/database". ИМХО это удобнее и красивее . Есть еще пара идей... |
|||
|
||||
IZ@TOP |
|
|||
Панда-бир! Профиль Группа: Участник Сообщений: 4795 Регистрация: 3.2.2003 Где: Бамбуковый лес Репутация: 3 Всего: 73 |
Mace, ты прав, я немного ошибся в определении значения слова "абстрактный". Надо будет доработачку внести.
Точно, это мне больше нравится. -------------------- Один из розовых плюшевых-всадников апокалипсиса... очень злой... Семь кругов ада для новых элементов языка Мои разрозненные мысли |
|||
|
||||
Irokez |
|
|||
индеец Профиль Группа: Участник Клуба Сообщений: 1180 Регистрация: 20.10.2004 Репутация: нет Всего: 53 |
было бы неплохо если бы в классе можно было управлять выводом ошибок, к примеру ввести дополнительную переменную - $showErrors, при откладки и тестировании сайта можно установить ей истинное значение и класс будет выводить ошибки, а когда уже запускаем сайт, то "выключаем" вывод ошибок, посетителям не обязательно знать какие запросы отсылются в базу ..
|
|||
|
||||
IZ@TOP |
|
|||
Панда-бир! Профиль Группа: Участник Сообщений: 4795 Регистрация: 3.2.2003 Где: Бамбуковый лес Репутация: 3 Всего: 73 |
Irokez, в общем на самом деле может и не стоит, просто с данным классом, если его правильно использовать, SQL инъекции исключены. Хотя всегда вариант "дыр" в основном коде остатся.
-------------------- Один из розовых плюшевых-всадников апокалипсиса... очень злой... Семь кругов ада для новых элементов языка Мои разрозненные мысли |
|||
|
||||
Opik |
|
|||
Эксперт Профиль Группа: Vingrad developer Сообщений: 1918 Регистрация: 6.10.2004 Где: Рига Репутация: 7 Всего: 55 |
IZ@TOP
Я бы добавил 2 аргумента в getResult - limit 1, 2 думаю ты меня понял... |
|||
|
||||
IZ@TOP |
|
|||
Панда-бир! Профиль Группа: Участник Сообщений: 4795 Регистрация: 3.2.2003 Где: Бамбуковый лес Репутация: 3 Всего: 73 |
Opr, да, в общем то я хочу разбивку сделать по страницам встроенную. А в getResult limit по моему не нужен. Если уж куда и ставить, то в запрос.
-------------------- Один из розовых плюшевых-всадников апокалипсиса... очень злой... Семь кругов ада для новых элементов языка Мои разрозненные мысли |
|||
|
||||
Opik |
|
|||
Эксперт Профиль Группа: Vingrad developer Сообщений: 1918 Регистрация: 6.10.2004 Где: Рига Репутация: 7 Всего: 55 |
IZ@TOP
аха тормознул |
|||
|
||||
IZ@TOP |
|
||||||||||||||||||||||||||||||||||||||
Панда-бир! Профиль Группа: Участник Сообщений: 4795 Регистрация: 3.2.2003 Где: Бамбуковый лес Репутация: 3 Всего: 73 |
Вот и выкладываю свой шаблонизатор.
Инструкция к шаблонизатору 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. Компиляция шаблона Для компиляции шаблона используется следующая функция которая запускает обработчики:
Первый аргумент говорит интерпретатору о необходимости замены переменных шаблона, второй о необходимости исполнить циклы, третий аргумент обозначает необзходимость обработки условий и четвертый соответственно дает знать что нужно искать в шаблоне директивы исполнения файлов. Примечание. К сожалению у меня сейчас нету времени описать все возможности шаблонизатора, думаю если Вы поковыряетесь в коде, то разберетесь в том что там есть еще. Класс шаблонизатора находится в прикрепленном файле. Присоединённый файл ( Кол-во скачиваний: 55 ) class.exec.templates.php -------------------- Один из розовых плюшевых-всадников апокалипсиса... очень злой... Семь кругов ада для новых элементов языка Мои разрозненные мысли |
||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||
fara |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 166 Регистрация: 15.3.2004 Где: С.-Петербург Репутация: нет Всего: 2 |
Предлагаю здесь разработать универсальный класс управления всеми возможными ошибками
Назовем его ессно как нить ErrorHandler --------------------
Крыша хлопает в ладоши -Спасибо всем за план хороший! |
|||
|
||||
IZ@TOP |
|
|||
Панда-бир! Профиль Группа: Участник Сообщений: 4795 Регистрация: 3.2.2003 Где: Бамбуковый лес Репутация: 3 Всего: 73 |
fara, почему бы и нет! Какова будет его структура и функционал?
-------------------- Один из розовых плюшевых-всадников апокалипсиса... очень злой... Семь кругов ада для новых элементов языка Мои разрозненные мысли |
|||
|
||||
fara |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 166 Регистрация: 15.3.2004 Где: С.-Петербург Репутация: нет Всего: 2 |
IZ@TOP
видел я один довольно приятный на чтение код в CMS Seagull... Предлагаю писать его как класс class ErrorHandler { ... } Что может делать наш класс: 1. записывать в журнал ошибки указывая род (тип) ошибки 2. возможность отправки на мыло серьезных ошибок Производить debug при отладке скриптов. Собсно осталось писать код Я над этим немного подумаю и выставлю че получилось. Добавлено @ 21:32
--------------------
Крыша хлопает в ладоши -Спасибо всем за план хороший! |
|||
|
||||
Irokez |
|
|||
индеец Профиль Группа: Участник Клуба Сообщений: 1180 Регистрация: 20.10.2004 Репутация: нет Всего: 53 |
Работая на локальной машине, часто возникает проблема с функцией mail, т.к. естесственно без почового сервера письмо никуда не идет. Кажется в денвере есть заглушка, которая вместо отсылки письма, просто сохраняет письмо в папку в виде текстового файла. Но т.к. я не сторонник денвера, решил написать свою заглушку, получилось весьма удобно:
т.е. в своем проекте вместо функции mail() можно пользоваться этой email(), которая принимает такие же параметры, как и mail(), функция будет сохранять "отправленные" письма в папке $email_dir, в папке названной именем почтового адреса куда отсылается письмо, с заголовком первого слова темы письма или с таким же названием + (цифра) если такое письмо уже отправлялось ранее |
|||
|
||||
Elfet |
|
|||
Белый и Пушистый Профиль Группа: Awaiting Authorisation Сообщений: 3776 Регистрация: 2.4.2003 Репутация: нет Всего: 16 |
Мод наград для IPB 2.1.х Сделал, кому может тоже нужно будет.
Присоединённый файл ( Кол-во скачиваний: 26 ) award.zip 41,58 Kb |
|||
|
||||
CyClon |
|
|||
Опытный Профиль Группа: Участник Сообщений: 838 Регистрация: 3.12.2005 Репутация: нет Всего: 4 |
Elfet, а что он может. У юзера будут показыватся награды чтоли?
|
|||
|
||||
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Другие движки / фрейморки | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |