diff --git a/manual/new/docs/en/plugins.txt b/manual/new/docs/en/plugins.txt index ee7f148c2..e5d898629 100644 --- a/manual/new/docs/en/plugins.txt +++ b/manual/new/docs/en/plugins.txt @@ -3,6 +3,70 @@ ++ Profiler ++ Locking Manager ++ Connection Profiler +++ Internationalization with I18n + +Doctrine_I18n is a plugin for Doctrine that provides internationalization support for record classes. In the following example we have a NewsItem class with two fields 'title' and 'content'. We want to have the field 'title' with different languages support. This can be achieved as follows: + + +class NewsItem extends Doctrine_Record +{ + public function setTableDefinition() + { + $this->hasColumn('title', 'string', 200); + $this->hasColumn('content', 'string'); + } + + public function setUp() + { + $this->actAs('I18n', array('fields' => array('title'))); + } +} + ++++ Creating the I18n table + +The I18n table can be created as follows: + + +$conn->setAttribute(Doctrine::ATTR_EXPORT, Doctrine::EXPORT_ALL); + +$conn->export->exportClasses(array('NewsItem')); + + +The following code example executes two sql statements. When using mysql those statements would look like: + + +CREATE TABLE news_item (id INT NOT NULL AUTO_INCREMENT, title VARCHAR(200), content TEXT) +CREATE TABLE news_item_translation (id INT NOT NULL, title VARCHAR(200), lang VARCHAR(20)) + + ++++ Using I18n + +In the following example we add some data with finnish and english translations: + + +$item = new NewsItem(); +$item->title = 'Some title'; +$item->content = 'This is some content. This field is not being translated.'; + +$item->Translation['FI']->title = 'Joku otsikko'; +$item->Translation['FI']->lang = 'FI'; + +$item->save(); + + +Now lets find all items and their finnish translations: + + +$items = Doctrine_Query::create() + ->from('NewsItem n') + ->leftJoin('n.Translation t INDEXBY t.lang') + ->where('t.lang = ?') + ->execute(array('FI')); + +$items[0]->Translation['FI']->title; // 'joku otsikko' + + + ++ AuditLog and versioning Doctrine_AuditLog provides a full versioning solution. Lets say we have a NewsItem class that we want to be versioned. This functionality can be applied by simply adding $this->actAs('Versionable') into your record setup. @@ -30,6 +94,22 @@ Now when we have defined this record to be versionable, Doctrine does internally * Everytime a NewsItem object is deleted / updated the previous version is stored into news_item_version * Everytime a NewsItem object is updated its version number is increased. ++++ Creating the version table + +As with all other plugins, the plugin-table, in this case the table that holds the different versions, can be created by enabling Doctrine::EXPORT_PLUGINS. The easiest way to set this is by setting the value of Doctrine::ATTR_EXPORT to Doctrine::EXPORT_ALL. The following example shows the usage: + + +$conn->setAttribute(Doctrine::ATTR_EXPORT, Doctrine::EXPORT_ALL); + +$conn->export->exportClasses(array('NewsItem')); + + +The following code example executes two sql statements. When using mysql those statements would look like: + + +CREATE TABLE news_item (id INT NOT NULL AUTO_INCREMENT, title VARCHAR(200), content TEXT, version INTEGER) +CREATE TABLE news_item_version (id INT NOT NULL, title VARCHAR(200), content TEXT, version INTEGER) + +++ Using versioning