[geeklog-devel] Geeklog 2 Framework Code in Action

Tony Bibbs tony at tonybibbs.com
Thu Dec 2 11:30:19 EST 2004

Also worth noting for you plugin developers is that you don't have to 
use MVCnPHP nor Propel.  In fact, unless you have a 'big' plugin (i.e. 
articles, forum, calendar, etc) you probably won't want to use MVCnPHP.  
The use of Propel is encouraged, especially for anyone who will 
contribute a large number of plugins as it will save you a lot of time 
once you've learned how to use it.  Strictly from a maintenance 
standpoint, though, I'd still encourage anyone willing to use both to do 
so.  For anyone not using Propel, you can get a handle to a database 
connection object and issue raw SQL right there.


Blaine Lang wrote:

>Looks good Tony .. and I will try to get it installed over the next week to 
>check it out.
>It certainly looks like a lot of work has been completed.
>Cheers and I'll let you know how it goes.
>----- Original Message ----- 
>From: "Tony Bibbs" <tony at tonybibbs.com>
>To: <geeklog-devel at lists.geeklog.net>
>Sent: Thursday, December 02, 2004 10:41 AM
>Subject: [geeklog-devel] Geeklog 2 Framework Code in Action
>For time sake I have attached the code I have already.  The code is for
>a sample Hunting Log Book application. It has a little bit of everything
>but is far from complete.  I'm sending this because Vinny is chompin' at
>the bit to get started.  I wrote this sample application to demonstrate
>a few things:
>1) use of MVCnPHP and how it allows us to generate small, atomic and
>easily managed code.
>2) use of Propel...without it the code would be at least 300% bigger
>3) use of a Data Access Object.  This object uses propel and hides the
>propel details from the developer for the most part.  Thus GL2
>developers should have to write very little SQL
>4) use of named queries
>5) use of the PEAR::HTML_Template_Flexy engine
>6) concepts on how to do data validation and formating in this new
>paradigm.  I'm not 100% satisfied with what I have but it is a step in
>the direction I think it should go.
>7) This shows the use of a List Of Values table.  It is a single table
>that can be reused to multiple times for look up values.  This is
>probably something many of you are familiar with but I wanted to point
>this out because it reduces the number of data structures we'd need
>considerably since look-up tables can now all reside in a single table
>As you view this, *please* ignore the layout...I'm not a layout guy.
>Here are the things worth noting.
>First, don't look into the underlying framework code too much until you
>get a feel for the basic code.  Specifically, your first gander should
>focus on code in the following directories:
>That's where the magic happens.  The commands and views directory are
>where the MVCnPHP commands and views go respectively.  Take time to
>notice and, hopefully, appreciate how little code exists in many of
>them.  Granted my sample application is quite trivial, but try and draw
>comparison's to how much code you would write to do the same thing with
>the 1.3.x code.  After you do that, there are some abstract classes in
>each of those directories that so some basic setup stuff.  You should
>look into those and understand them as we'll need to
>The templates directory is where the Flexy templates go.  The layout I
>have defined in this app doesn't support the notion of a theme...I can
>add that later with little trouble as it is just a matter of how we want
>to layout the directories.  I haven't exercised all the features of
>flexy in the views I have but it does do the most common things.  Flexy
>works quite differently from PHPLib that 1.3.x so I would read up on the
>documentation for it.
>You'll notice this code in the commands and views have absolutely no SQL
>in them.  Propel should generate 90% of the SQL and the other 10% must
>go into the /path/to/system/Data_Access/NamedQueries.xml.  I'm sure
>there will be a debate as to why all custom SQL must go in an XML file
>so here are a few reasons:
>1) Cleaner code in the commands/views.  It isn't muddled with SQL
>2) Having the SQL in a single file allows us to reuse queries and gives
>us a single place for making modifcations should the DB structures change.
>3) The biggest benefit which isn't implemented yet, is that I can use
>the queries in that XML file and generate a single PHPUnit2 script that
>would regression test all the queries with a single command.  This is a
>huge time saver in the case where we have massive structure updates that
>will undoubtedly happen during alpha development.  Again, this isn't
>implemented but I'm working on it now.
>Also missing from this implementation is the ability to allow more than
>one query XML file.  This will be required for plugins as it will allow
>them to manage their own file for named queries seperate form those used
>by the core GL2 kernel.
>Here are the crude instructions for installing this. NOTE: Phing is not
>required but Propel is because I haven't packaged the code into this
>tarball. In the first GL2 alpha we'd obviously fix that but I don't want
>anyone freaking about about requireing Propel.  Oh, and you'll notice
>Propel requires Phing...this is only for doing builds.  I've already
>done the build for the app in this case.  If you want a copy of this
>tarball modified to include the Propel code please let me know...I'd be
>more than happy to do it since installing Propel can be a bit tricky.
>1) Make sure you have PHP5 ;-)
>2) unpack into webtree
>3) Make sure you have a version of MySQL that supports INNODB and
>foreign keys.
>4) create a database for this sample app
>5) Import /path/to/HuntingLog/data/create.sql into your database
>6) edit config.php to match your system
>7) edit the database settings in
>8) Now open browser and point it to index.php
>Please only review it for the features I have noted.  This is meant to
>be a throw away prototype and I assume we'll make many changes in the
>short term to the framework.  By all means fire over any questions.  If
>you have no questions but get it installed successfully even letting me
>know you got it installed would be nice.
>geeklog-devel mailing list
>geeklog-devel at lists.geeklog.net

More information about the geeklog-devel mailing list