Dec 02 2008

Основы организации древовидных структур в базах данных (Nested Sets)

Category: Symfony,Разработкаingvar @ 22:46

Подборка материалов по работе с деревьями (Nested Sets) в SQL.

Wikipedia: Иерархические базы данных
Иерархическая модель базы данных состоит из объектов с указателями от родительских объектов к потомкам, соединяя вместе связанную информацию.

Иерархические базы данных могут быть представлены как дерево, состоящее из объектов различных уровней. Верхний уровень занимает один объект, второй — объекты второго уровня и т. д.

Между объектами существуют связи, каждый объект может включать в себя несколько объектов более низкого уровня. Такие объекты находятся в отношении предка (объект более близкий к корню) к потомку (объект более низкого уровня), при этом возможно, когда объект-предок не имеет потомков или имеет их несколько, тогда как у объекта-потомка обязательно только один предок. Объекты, имеющие общего предка, называются близнецами.

Читать дальше


Nov 27 2008

Symfony: Propel предзагрузка объектов (preload objects)

Category: Symfonyingvar @ 22:33

Цель: уменьшить количество запросов для таблиц использующих много внешних ключей.

Описание проблемы: имеем 4 таблицы: news, news_i18n, news_type и news_type_i18n. На странице нужно отобразить список из 20 новостей, используя все перечисленные таблицы. А это 21 запрос. Методы doSelectWithI18n и doSelectJoinAll не позволяют получить значения i18n NewsTypePeer для NewsPeer с минимальным количеством запросов к БД.

Решение проблемы: вместо 21 запроса к БД выполнить 2. Механизм — использовать предзагрузку объектов NewsTypePeer со значениями i18n.

Читать дальше


Nov 11 2008

Symfony: интернационализация (I18n) / часть 2 – редактирование данных в административной панели

Category: Symfonyingvar @ 00:33

Часть 2: интернационализация (I18n) – редактирование данных в административной панели

Продолжение темы мультиязычности в Symfony: первой части, где рассказывались основы работы с интернационализацией в Symfony. Теперь рассмотрим, как данные редактировать в административной панели для нескольких языков.

Исходный код к статье — demo-i18n_part2.zip (source code). Код написан на Symfony 1.2, Propel 1.3.

Рисунок 2.1: Пример Frontend (Example Frontend)

Читать дальше


Oct 29 2008

Symfony: интернационализация (I18n) / часть 1 — введение

Category: Symfonyingvar @ 00:32

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

Часть 1.1: интернационализация (I18n) — введение

Немного теории (источник Википедия).

Интернационализа́ция (англ. internationalization) — процесс адаптации продукта, такого как программное или аппаратное обеспечение, к языковым и культурным особенностям региона (регионов), отличного от того, в котором разрабатывался продукт. В английском языке для слова «internationalization» принято сокращение «i18n». При этом число 18 означает количество пропущенных между «i» и «n» букв.

Локализа́ция (англ. localization) — перевод и адаптация элементов интерфейса, вспомогательных файлов и документации. В английском языке для слова «localization» иногда применяется сокращение «l10n». При этом число 10 означает количество пропущенных между «l» и «n» букв.

Читать дальше


Oct 28 2008

Первая конференция по Symfony в Украине состоялась

Category: Symfonyingvar @ 22:25

Прошла первая в Украине конференция по фреймворку Symfony. Сие событие происходило в городе Черкассы. Было не так много людей, как предполагалась. Надеюсь на следующую удастся съездить :). 

Основная тема была Symfony 1.1 — на глазах у присутствующих было «собрано» небольшое приложение с использованием форм, админки. Осталось только дождаться, когда выложат презентации от всех докладчиков.

Источник — отчет по самой конференции.


Sep 21 2008

Symfony: неправильный символ апострофа в файле uk.dat для украинского языка

Category: Symfonyingvar @ 19:41

Необходимо было реализовать украинскую версию на Symfony. И какое же было разочарование когда возникли проблемы со словами, где встречается апостроф, например: П’ятниця, и др… В браузерах IE, Opera слова просто «рвало» или, что ещё хуже был просто квадрат, как будто такого символа в таблице UTF-8 нет. При изучения файла uk.xml стало ясно, что это символ апостроф. В итоге после исправления всех слов получился пропатченный файл, который прекрасно работает во всех браузерах.
Скачать пропатченный файл uk.xml.

Возник вопрос: откуда разработчики скопировали данные для файлов i18n и выяснилось, что данные были получены с сайта: unicode.org, где те же проблемы :(. Хотя в файле Ukrainian-Latin-BGN.xml символ апострофа правильный.

P.S.
За что я обожаю сообщество Symfony — за его оперативность, не успел разместить задачу с этой проблемой, как сегодня же обновили этот файл моим патчем :), так что ждем несколько дней и скачиваем обновление из SVN.


Sep 03 2008

Symfony 1.2: небольшие приятные изменения 2008-09-02

Category: Symfonyingvar @ 00:00

С каждой новой версией разработчики Symfony делают все, чтобы упростить работу API и сделать её более интуитивной и мощной. Вот некоторые примеры того, чем можно будет воспользоваться в symfony 1.2.

1. Названия Приложениний в CLI задачах / Application name in CLI tasks

Некоторые Propel задачи требует указания имя application в аргументах, потому что требуется подключение к БД. На самом деле в некоторых случаях этот параметр не требуется, когда задачи работают с БД не для конкретного application, а всего проекта.

Команда propel:build-all-load теперь выполняется как и другие задачи вида propel:build-*:

# symfony 1.2
./symfony propel:build-all-load
 
# symfony 1.1
./symfony propel:build-all-load application_name

Читать дальше


Aug 24 2008

sfPropelPagerI18n: расширяем sfPropelPager для поддержки i18n

Category: Symfonyingvar @ 02:26

sfPropelPager — это встроенная в Propel функциональность, которая позволяет организовать Пейджинг (Propel Pager), т.е. разбивку на страницы. Работает великолепно, ознакомиться подробнее можно в статье How to paginate a list. Описанные ниже действия проводились на Propel 1.3.

Принцип работы простой, сначала делается запрос на определение количества записей, а далее получаем данные с учетом количества их на странице. Например, имеем Propel ORM объекты News и NewsI18n.
Читать дальше


Aug 22 2008

Обзор Propel Behaviors в Symfony на примере плагина sfPropelActAsTaggableBehaviorPlugin

Category: Symfonyingvar @ 23:31

В Symfony для Propel есть такая замечательная функциональность как Behaviors. Благодаря Behavior можно расширять существующие модели без необходимости изменять код самой модели. Фактически получает имитация «множественного» наследования. Зачем это надо? К примеру есть вот такой интересный плагин sfPropelActAsTaggableBehaviorPlugin — задумка прекрасная, сделать возможность добавлять теги для любых моделей. Чтобы активировать Behaviors нужно в propel.ini включить их.
Читать дальше


Aug 17 2008

Объявление типов столбцов (enum, datetime, tinytext, year) для MySQL, которые явно не поддерживаются в Propel 1.3

Category: Symfonyingvar @ 22:06

В документации Propel можно увидеть таблицы соответствия между ним и типами столбцов MySQL (Propel Column Types). Проблема в том, что не все типы столбцов можно явно указать.
Если попытаться указать поле типа ENUM, то при генерировании SQL получим ошибку:

Cannot map unknown Propel type 'ENUM' ...
Cannot map unknown Propel type 'ENUM' to native database type ..

Похожая ситуация наблюдается и в следующем примере. Например, если в схеме указать нижеследующее, то получим ошибку на счет поля created_at ( Cannot map unknown Propel type ‘DATETIME’ to native database type ):

my_product_i18n:
_attributes: { phpName: ProductI18n }
id:          { type: integer, required: true, primaryKey: true, foreignTable: my_product, foreignReference: id }
culture:     { isCulture: true, type: varchar, size: 7, required: true, primaryKey: true }
name:        { type: varchar, size: 50 }
created_at:  { type: datetime }

Читать дальше


← Предыдущая страницаСледующая страница →