TIP: Use Markdown or, <pre> for multi line code blocks / <code> for inline code.
These forums are read-only and for archival purposes only!
Please join our new forums at discourse.kohanaframework.org
New version of Lattice cms and more docs
  • The dev branch of lattice cms has been merged to master, meaning that it's now quite stable and can be used to build sites. A MAJOR advance on this branch was refactoring the code to be much more in line with the Kohana coding conventions, and reorganization of the module directory structure for easier understanding, forking, and extending. I've also added some pdf docs that were generated for some discussions with other developers into the docs/ folder, which also contains a copy of the lattice wiki, which is now offline (final target will involve copying this content into the github account).

    Lattice is a graph database CMS system for building websites with simple to complex content graphs, allowing for a wide variety dynamic associations between objects without the need for building out a complex database structure behind the scenes. Lattice allows you to specify your content graph in a configuration file, edit the content trees and attributes via the cms, and provide this data to the view layer without intervention at the database level.

    Thanks for your interest.

    https://github.com/deepwinter/lattice/ https://github.com/deepwinter/lattice/tree/master/docs

  • WTF?

    CREATE TABLE `contents` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `object_id` int(11) NOT NULL DEFAULT '0',
      `title` varchar(255) CHARACTER SET utf8 NOT NULL DEFAULT '',
      `field1` text CHARACTER SET utf8,
      `field2` text CHARACTER SET utf8,
      `field3` text CHARACTER SET utf8,
      `field4` text CHARACTER SET utf8,
      `field5` text CHARACTER SET utf8,
      `field6` text CHARACTER SET utf8,
      `field7` text CHARACTER SET utf8,
      `field8` text CHARACTER SET utf8,
      `field9` text CHARACTER SET utf8,
      `field10` text CHARACTER SET utf8,
      `field11` text CHARACTER SET utf8,
      `field12` text CHARACTER SET utf8,
      `field13` text CHARACTER SET utf8,
      `field14` text CHARACTER SET utf8,
      `field15` text CHARACTER SET utf8,
      `field16` text CHARACTER SET utf8,
      `field17` text CHARACTER SET utf8,
      `field18` text CHARACTER SET utf8,
      `field19` text CHARACTER SET utf8,
      `field20` text CHARACTER SET utf8,
      `field21` text CHARACTER SET utf8,
      `field22` text CHARACTER SET utf8,
      `field23` text CHARACTER SET utf8,
      `field24` text CHARACTER SET utf8,
      `field25` text CHARACTER SET utf8,
      `field26` text CHARACTER SET utf8,
      `field27` text CHARACTER SET utf8,
      `field28` text CHARACTER SET utf8,
      `field29` text CHARACTER SET utf8,
      `field30` text CHARACTER SET utf8,
      `field31` text CHARACTER SET utf8,
      `field32` text CHARACTER SET utf8,
      `field33` text CHARACTER SET utf8,
      `field34` text CHARACTER SET utf8,
      `field35` text CHARACTER SET utf8,
      `field36` text CHARACTER SET utf8,
      `field37` text CHARACTER SET utf8,
      `field38` text CHARACTER SET utf8,
      `field39` text CHARACTER SET utf8,
      `field40` text CHARACTER SET utf8,
      `field41` text CHARACTER SET utf8,
      `field42` text CHARACTER SET utf8,
      `field43` text CHARACTER SET utf8,
      `field44` text CHARACTER SET utf8,
      `field45` text CHARACTER SET utf8,
      `field46` text CHARACTER SET utf8,
      `field47` text CHARACTER SET utf8,
      `field48` text CHARACTER SET utf8,
      `field49` text CHARACTER SET utf8,
      `field50` text CHARACTER SET utf8,
      `field51` text CHARACTER SET utf8,
      `field52` text CHARACTER SET utf8,
      `field53` text CHARACTER SET utf8,
      `field54` text CHARACTER SET utf8,
      `field55` text CHARACTER SET utf8,
      `field56` text CHARACTER SET utf8,
      `field57` text CHARACTER SET utf8,
      `field58` text CHARACTER SET utf8,
      `field59` text CHARACTER SET utf8,
      `field60` text CHARACTER SET utf8,
      `field61` text CHARACTER SET utf8,
      `field62` text CHARACTER SET utf8,
      `field63` text CHARACTER SET utf8,
      `field64` text CHARACTER SET utf8,
      `field65` text CHARACTER SET utf8,
      `field66` text CHARACTER SET utf8,
      `field67` text CHARACTER SET utf8,
      `field68` text CHARACTER SET utf8,
      `field69` text CHARACTER SET utf8,
      `field70` text CHARACTER SET utf8,
      `field71` text CHARACTER SET utf8,
      `field72` text CHARACTER SET utf8,
      `field73` text CHARACTER SET utf8,
      `field74` text CHARACTER SET utf8,
      `field75` text CHARACTER SET utf8,
      `field76` text CHARACTER SET utf8,
      `field77` text CHARACTER SET utf8,
      `field78` text CHARACTER SET utf8,
      `field79` text CHARACTER SET utf8,
      `field80` text CHARACTER SET utf8,
      `field81` text CHARACTER SET utf8,
      `field82` text CHARACTER SET utf8,
      `field83` text CHARACTER SET utf8,
      `field84` text CHARACTER SET utf8,
      `field85` text CHARACTER SET utf8,
      `field86` text CHARACTER SET utf8,
      `field87` text CHARACTER SET utf8,
      `field88` text CHARACTER SET utf8,
      `field89` text CHARACTER SET utf8,
      `field90` text CHARACTER SET utf8,
      `field91` text CHARACTER SET utf8,
      `field92` text CHARACTER SET utf8,
      `field93` text CHARACTER SET utf8,
      `field94` text CHARACTER SET utf8,
      `field95` text CHARACTER SET utf8,
      `field96` text CHARACTER SET utf8,
      `field97` text CHARACTER SET utf8,
      `field98` text CHARACTER SET utf8,
      `field99` text CHARACTER SET utf8,
      `field100` text CHARACTER SET utf8,
        ......
    
          200 more strings
        ......
      `activity` char(1) CHARACTER SET utf8 DEFAULT NULL,
      PRIMARY KEY (`object_id`),
      KEY `id` (`id`)
    ) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
    
  • Need some EAV here! http://en.wikipedia.org/wiki/Entity–attribute–value_model

    Not sure how Kohana handles those with ORM

  • This is an implementation of something similar to an entity attribute value model, which translates this to the kohana ORM. Magento (for instance) takes an approach to genericizing object datatypes which utilizes a highly normalized mysql database. This is the technically correct approach in theory, but we found (and also you will find with Magento) that much more memory is needed to run in a reasonable timeline because of the massive number of joins necessary for even a simple object query. It also makes debugging very difficult. So we chose a middle ground during a development - a sparse table large enough to hold most content for a dataset at the scale of a typical custom website. This has in fact been a good choice during the implementation of the system.

    It should be noted that the lattice architecture allows for the substitution of different 'content drivers' to handle the mapping of content fields to the object types. Should there be interest it would be straightforward to integrate differing approaches to graph data storage that have a more normalized or compact EAV approach, though you aren't going to see much difference in performance or usability (and may actually take a hit) until a much more massive level of content than a typical website. Our largest lattice deployment contains something on the scale of 3000 objects (records, pages of content) without any issues using the current content drive.

    @artad - I'd appreciate something more like a question and discussion of design rather that a "WTF" shoot-down of something that clearly a decent amount of time has been put into. There is at least discussion to be had behind given design beyond simply looking for a weak point, especially one that the developers have built modularly to be improved upon over time.

    @chrisgo - Kohana ORM doesn't really do much with EAV / open schema. This is exactly the limitation that lattice attempts to address. Mysql, as a relational database, is inherently limited in this regard, but since Kohana typically runs against LAMP we have implemented a robust system to address these kinds of needs. If you'd like to help out 'under the hood,' we are definitely open to collaboration.

    Thanks for your interest.

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

In this Discussion