Yesterday I wrote about my first draft version of a PHP code generator for custom Drupal content types written with Xtext and Xpand. Today I added some more features to the generator.
I made some minor enhancements to the DSLs grammar: now a string and text field type are available. While the first is a length-limited field that is mapped to a varchar column in the database and a textfield in the nodes edit form, the text field is mapped to text field in the database and a textarea in the nodes edit form (Input format filters are not supported yet).
More important is the generation of the edit form, that works now (at least at a very basic level). For example have a look at the form that allows the creation of the Article content type:
Saving and loading of new nodes to the database also works as the hook_install(), hook_uninstall() and hook_schema()-method implementations are generated now. The following code shows the schema definition for the Artice content type:
<?php // ------------------------------------------------------------------------- // --- AUTOMATICALLY GENERATED. DO NOT EDIT ! --- // ------------------------------------------------------------------------- /** * Defines the database schema for the * Article content type */ function news_article_schema() { return array ( 'fields' => array( 'vid' => array( 'type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, 'default' => 0 ), 'nid' => array( 'type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, 'default' => 0 ), 'abstract' => array( 'type' => 'text', 'not null' => TRUE, ), 'subtitle' => array( 'type' => 'varchar', 'not null' => FALSE, 'length' => 300 ), 'writer' => array( 'type' => 'varchar', 'not null' => FALSE, 'length' => 50 ), 'date' => array( 'type' => 'datetime', 'not null' => TRUE, ), 'topic' => array( 'type' => 'varchar', 'not null' => TRUE, 'length' => 8 ) ), 'indexes' => array( 'nid' => array('nid') ), 'primary key' => array('vid') ); } ?>
In addition the .module and .install files are generated.
For a "complete" Drupal module only the .info file is missing now.

