diff --git a/en/_exts/configurationblock.py b/en/_exts/configurationblock.py new file mode 100644 index 000000000..36ca61f5b --- /dev/null +++ b/en/_exts/configurationblock.py @@ -0,0 +1,93 @@ +#Copyright (c) 2010 Fabien Potencier +# +#Permission is hereby granted, free of charge, to any person obtaining a copy +#of this software and associated documentation files (the "Software"), to deal +#in the Software without restriction, including without limitation the rights +#to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +#copies of the Software, and to permit persons to whom the Software is furnished +#to do so, subject to the following conditions: +# +#The above copyright notice and this permission notice shall be included in all +#copies or substantial portions of the Software. +# +#THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +#IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +#FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +#AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +#LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +#OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +#THE SOFTWARE. + +from docutils.parsers.rst import Directive, directives +from docutils import nodes +from string import upper + +class configurationblock(nodes.General, nodes.Element): + pass + +class ConfigurationBlock(Directive): + has_content = True + required_arguments = 0 + optional_arguments = 0 + final_argument_whitespace = True + option_spec = {} + formats = { + 'html': 'HTML', + 'xml': 'XML', + 'php': 'PHP', + 'yaml': 'YAML', + 'jinja': 'Twig', + 'html+jinja': 'Twig', + 'jinja+html': 'Twig', + 'php+html': 'PHP', + 'html+php': 'PHP', + 'ini': 'INI', + 'php-annotations': 'Annotations', + } + + def run(self): + env = self.state.document.settings.env + + node = nodes.Element() + node.document = self.state.document + self.state.nested_parse(self.content, self.content_offset, node) + + entries = [] + for i, child in enumerate(node): + if isinstance(child, nodes.literal_block): + # add a title (the language name) before each block + #targetid = "configuration-block-%d" % env.new_serialno('configuration-block') + #targetnode = nodes.target('', '', ids=[targetid]) + #targetnode.append(child) + + innernode = nodes.emphasis(self.formats[child['language']], self.formats[child['language']]) + + para = nodes.paragraph() + para += [innernode, child] + + entry = nodes.list_item('') + entry.append(para) + entries.append(entry) + + resultnode = configurationblock() + resultnode.append(nodes.bullet_list('', *entries)) + + return [resultnode] + +def visit_configurationblock_html(self, node): + self.body.append(self.starttag(node, 'div', CLASS='configuration-block')) + +def depart_configurationblock_html(self, node): + self.body.append('\n') + +def visit_configurationblock_latex(self, node): + pass + +def depart_configurationblock_latex(self, node): + pass + +def setup(app): + app.add_node(configurationblock, + html=(visit_configurationblock_html, depart_configurationblock_html), + latex=(visit_configurationblock_latex, depart_configurationblock_latex)) + app.add_directive('configuration-block', ConfigurationBlock) diff --git a/en/_exts/configurationblock.pyc b/en/_exts/configurationblock.pyc new file mode 100644 index 000000000..bd1959c3a Binary files /dev/null and b/en/_exts/configurationblock.pyc differ diff --git a/en/_static/configurationblock.css b/en/_static/configurationblock.css new file mode 100644 index 000000000..447d29631 --- /dev/null +++ b/en/_static/configurationblock.css @@ -0,0 +1,93 @@ +ul.simple +{ + padding: 5px 0 0 0; +} + +ul.simple li +{ + margin: 0; + margin-right: 5px; + display: inline; +} + +div.configuration-block em +{ + margin-bottom: 10px; +} + +div.configuration-block li +{ + padding: 5px; +} + +div.configuration-block em +{ + font-style: normal; + font-size: 90%; +} + +div.jsactive +{ + position: relative; +} + +div.jsactive ul +{ + list-style: none; +} + +div.jsactive li +{ + float: left; + list-style: none; + margin-left: 0; + -moz-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; + background-color: #ddd; + margin-right: 5px; +} + +div.jsactive .selected +{ + background-color: #000; +} + +div.jsactive .selected a +{ + color: #fff; + text-decoration: none; +} + +div.jsactive .selected a:hover +{ + color: #fff; + text-decoration: underline; +} + +div.jsactive a +{ + color: #000; + text-decoration: none; +} + +div.jsactive a:hover +{ + color: #000; + text-decoration: underline; +} + +div.jsactive div +{ + position: absolute; + top: 30px; + left: 0; +} + +div.jsactive div div +{ + position: static; +} + +div.jsactive pre +{ + margin: 0; +} diff --git a/en/_static/configurationblock.js b/en/_static/configurationblock.js new file mode 100644 index 000000000..0f708a1a8 --- /dev/null +++ b/en/_static/configurationblock.js @@ -0,0 +1,34 @@ +$(document).ready(function(){ + $('div.configuration-block [class^=highlight-]').hide(); + $('div.configuration-block [class^=highlight-]').width($('div.configuration-block').width()); + + $('div.configuration-block').addClass('jsactive'); + $('div.configuration-block').addClass('clearfix'); + + $('div.configuration-block').each(function (){ + var el = $('[class^=highlight-]:first', $(this)); + el.show(); + el.parents('ul').height(el.height() + 40); + }); + + // Global + $('div.configuration-block li').each(function(){ + var str = $(':first', $(this)).html(); + $(':first ', $(this)).html(''); + $(':first ', $(this)).append('' + str + '') + $(':first', $(this)).bind('click', function(){ + $('[class^=highlight-]', $(this).parents('ul')).hide(); + $('li', $(this).parents('ul')).removeClass('selected'); + $(this).parent().addClass('selected'); + + var block = $('[class^=highlight-]', $(this).parent('li')); + block.show(); + block.parents('ul').height(block.height() + 40); + return false; + }); + }); + + $('div.configuration-block').each(function (){ + $('li:first', $(this)).addClass('selected'); + }); +}); diff --git a/en/_templates/layout.html b/en/_templates/layout.html index 79878cee5..447c36b64 100644 --- a/en/_templates/layout.html +++ b/en/_templates/layout.html @@ -104,6 +104,7 @@ {{ title|striptags }}{{ titlesuffix }} + {%- if not embedded %} {%- for scriptfile in script_files %} + {%- endfor %} {%- if use_opensearch %} `. An entity contains persistable properties. A persistable property -is an instance variable of the entity that contains the data which -is persisted and retrieved by Doctrine's data mapping -capabilities. +is an instance variable of the entity that is saved into and retrieved from the database +by Doctrine's data mapping capabilities. An Example Model: Bug Tracker ----------------------------- @@ -225,8 +224,8 @@ the bi-directional reference: reportedBugs[] = $bug; @@ -298,7 +300,7 @@ the database that points from from Bugs to Products. - - - - - - - - - - + .. code-block:: php + + + + + + + + + + + + + .. code-block:: yaml + + Product: + type: entity + table: products + id: + id: + type: integer + generator: + strategy: AUTO + fields: + name: + type: string The top-level ``entity`` definition tag specifies information about the class and table-name. The primitive type ``Product::$name`` is @@ -387,43 +416,99 @@ case of PostgreSql and Oracle. We then go on specifying the definition of a Bug: -.. code-block:: xml +.. configuration-block:: + .. code-block:: php - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + .. code-block:: yaml + + Bug: + type: entity + table: bugs + id: + id: + type: integer + generator: + strategy: AUTO + fields: + description: + type: text + created: + type: datetime + status: + type: string + manyToOne: + reporter: + targetEntity: User + inversedBy: reportedBugs + engineer: + targetEntity: User + inversedBy: assignedBugs + manyToMany: + products: + targetEntity: Product + Here again we have the entity, id and primitive type definitions. The column names are used from the Zend\_Db\_Table examples and @@ -456,26 +541,79 @@ schema details all the time. The last missing definition is that of the User entity: -.. code-block:: xml +.. configuration-block:: - - - - - - - - - - - - - - - + .. code-block:: php + + + + + + + + + + + + + + + + .. code-block:: yaml + + User: + type: entity + table: users + id: + id: + type: integer + generator: + strategy: AUTO + fields: + name: + type: string + oneToMany: + reportedBugs: + targetEntity: Bug + mappedBy: reporter + assignedBugs: + targetEntity: Bug + mappedBy: engineer Here are some new things to mention about the ``one-to-many`` tags. Remember that we discussed about the inverse and owning side. Now @@ -511,7 +649,9 @@ step: $config->setAutoGenerateProxyClasses((APPLICATION_ENV == "development")); // Mapping Configuration (4) - $driverImpl = new Doctrine\ORM\Mapping\Driver\XmlDriver(__DIR__."/config/mappings"); + $driverImpl = new Doctrine\ORM\Mapping\Driver\XmlDriver(__DIR__."/config/mappings/xml"); + //$driverImpl = new Doctrine\ORM\Mapping\Driver\XmlDriver(__DIR__."/config/mappings/yml"); + //$driverImpl = $config->newDefaultAnnotationDriver(__DIR__."/entities"); $config->setMetadataDriverImpl($driverImpl); // Caching Configuration (5) @@ -603,10 +743,10 @@ doctrine command. Its a fairly simple file: You can then change into your project directory and call the Doctrine command-line tool: -.. code-block:: bash +:: doctrine@my-desktop> cd myproject/ - doctrine@my-desktop> doctrine orm:schema-tool:create + doctrine@my-desktop> doctrine orm:schema-tool:create --force .. note:: @@ -624,16 +764,16 @@ During the development you probably need to re-create the database several times when changing the Entity metadata. You can then either re-create the database: -.. code-block:: bash +:: - doctrine@my-desktop> doctrine orm:schema-tool:drop - doctrine@my-desktop> doctrine orm:schema-tool:create + doctrine@my-desktop> doctrine orm:schema-tool:drop --force + doctrine@my-desktop> doctrine orm:schema-tool:create --force Or use the update functionality: -.. code-block:: bash +:: - doctrine@my-desktop> doctrine orm:schema-tool:update + doctrine@my-desktop> doctrine orm:schema-tool:update --force The updating of databases uses a Diff Algorithm for a given Database Schema, a cornerstone of the ``Doctrine\DBAL`` package,