Dynamic Css for CMS and More!
OVERVIEW:
The whole structure of this Dynamic Css System is driven by DB yet written to a flat file anytime that the Dynamic Css System is written or used. There are also some minor issues, like implanting a custom hack for CSS Compliance for IE, but this is easily handled and explained in more detail later.
Let's get this started. The first thing to do is setup the model. Here is the sql for MySQL 5.
Download code
--
-- Table structure for table `dyna_csses`
--
DROP TABLE IF EXISTS `dyna_csses`;
CREATE TABLE IF NOT EXISTS `dyna_csses` (
`id` int(10) unsigned NOT NULL auto_increment,
`tag` varchar(255) collate utf8_bin default NULL,
`background_attachment` enum('fixed','inherit','scroll') collate utf8_bin default NULL,
`background_color` varchar(10) collate utf8_bin default NULL,
`background_image` varchar(255) collate utf8_bin default NULL,
`background_position` varchar(255) collate utf8_bin default NULL,
`background_repeat` enum('no-repeat','repeat','repeat-x','repeat-y','inherit') collate utf8_bin default NULL,
`border_bottom_color` varchar(10) collate utf8_bin default NULL,
`border_bottom_style` enum('none','dotted','dashed','solid','double','groove','ridge','inset','outset') collate utf8_bin default NULL,
`border_bottom_width` varchar(255) collate utf8_bin default NULL,
`border_collapse` enum('collapse','seperate','inherit') collate utf8_bin default NULL,
`border_left_color` varchar(10) collate utf8_bin default NULL,
`border_left_style` enum('none','dotted','dashed','solid','double','groove','ridge','inset','outset') collate utf8_bin default NULL,
`border_left_width` varchar(255) collate utf8_bin default NULL,
`border_right_color` varchar(10) collate utf8_bin default NULL,
`border_right_style` enum('none','dotted','dashed','solid','double','groove','ridge','inset','outset') collate utf8_bin default NULL,
`border_right_width` varchar(255) collate utf8_bin default NULL,
`border_spacing` varchar(255) collate utf8_bin default NULL,
`border_top_color` varchar(10) collate utf8_bin default NULL,
`border_top_style` enum('NULL','none','dotted','dashed','solid','double','groove','ridge','inset','outset') collate utf8_bin default NULL,
`border_top_width` varchar(255) collate utf8_bin default NULL,
`bottom` varchar(255) collate utf8_bin default NULL,
`caption_side` enum('top','bottom','inherit') collate utf8_bin default NULL,
`clear` enum('none','left','right','both','inherit') collate utf8_bin default NULL,
`clip` varchar(255) collate utf8_bin default NULL,
`color` varchar(10) collate utf8_bin default NULL,
`cursor` varchar(255) collate utf8_bin default NULL,
`direction` enum('ltr','rtl','inherit') collate utf8_bin default NULL,
`empty_cells` enum('show','hide','inherit') collate utf8_bin default NULL,
`float` enum('left','right','none','inherit') collate utf8_bin default NULL,
`font` enum('caption','icon','menu','message-box','small-caption','status-bar') collate utf8_bin default NULL,
`font_family` varchar(255) collate utf8_bin default NULL,
`font_size` varchar(255) collate utf8_bin default NULL,
`font_style` enum('normal','italic','oblique','inherit') collate utf8_bin default NULL,
`font_variant` enum('normal','small-caps','inherit') collate utf8_bin default NULL,
`font_weight` enum('normal','bold','bolder','lighter','100','200','300','400','500','600','700','800','900','inherit') collate utf8_bin default NULL,
`height` varchar(255) collate utf8_bin default NULL,
`left` varchar(255) collate utf8_bin default NULL,
`letter_spacing` varchar(255) collate utf8_bin default NULL,
`line_height` varchar(255) collate utf8_bin default NULL,
`list_style_image` varchar(255) collate utf8_bin default NULL,
`list_style_position` enum('inside','outside','inherit') collate utf8_bin default NULL,
`list_style_type` enum('disc','square','circle','decimal','decimal-leading-zero','lower-roman','upper-roman','lower-greek','lower-alpha','lower-latin','upper-alpha','upper-latin','hebrew','armenian','georgian','cjk-ideographic','hiragana','katakana','hiragana-iroha','katakana-iroha','none','inherit') collate utf8_bin default NULL,
`margin_bottom` varchar(255) collate utf8_bin default NULL,
`margin_left` varchar(255) collate utf8_bin default NULL,
`margin_right` varchar(255) collate utf8_bin default NULL,
`margin_top` varchar(255) collate utf8_bin default NULL,
`max_height` varchar(255) collate utf8_bin default NULL,
`max_width` varchar(255) collate utf8_bin default NULL,
`min_height` varchar(255) collate utf8_bin default NULL,
`min_width` varchar(255) collate utf8_bin default NULL,
`outline_color` varchar(255) collate utf8_bin default NULL,
`outline_style` enum('none','hidden','dotted','dashed','solid','double','groove','ridge','inset','outset','inherit') collate utf8_bin default NULL,
`outline_width` varchar(255) collate utf8_bin default NULL,
`overflow` enum('visible','hidden','scroll','auto','inherit') collate utf8_bin default NULL,
`padding_bottom` varchar(255) collate utf8_bin default NULL,
`padding_left` varchar(255) collate utf8_bin default NULL,
`padding_right` varchar(255) collate utf8_bin default NULL,
`padding_top` varchar(255) collate utf8_bin default NULL,
`page` varchar(255) collate utf8_bin default NULL,
`page_break_after` enum('auto','always','avoid','left','right','inherit') collate utf8_bin default NULL,
`page_break_before` enum('auto','always','avoid','left','right','inherit') collate utf8_bin default NULL,
`page_break_inside` enum('auto','always','avoid','left','right','inherit') collate utf8_bin default NULL,
`position` enum('static','relative','absolute','fixed','inherit') collate utf8_bin default NULL,
`quotes` enum('none','inherit') collate utf8_bin default NULL,
`right` varchar(255) collate utf8_bin default NULL,
`table_layout` enum('auto','fixed','inherit') collate utf8_bin default NULL,
`text_align` enum('center','justify','right','left','inherit') collate utf8_bin default NULL,
`text_decoration` enum('none','underline','overline','line-through','blink','inherit') collate utf8_bin default NULL,
`text_indent` varchar(255) collate utf8_bin default NULL,
`text_transform` enum('capitalize','uppercase','lowercase','none','inherit') collate utf8_bin default NULL,
`top` varchar(255) collate utf8_bin default NULL,
`unicode_bidi` enum('normal','embed','bidi-override','inherit') collate utf8_bin default NULL,
`vertical_align` varchar(255) collate utf8_bin default NULL,
`visibility` enum('visible','hidden','collapse','inherit') collate utf8_bin default NULL,
`white_space` enum('normal','pre','pre-wrap','pre-line','nowrap','inherit') collate utf8_bin default NULL,
`width` varchar(255) collate utf8_bin default NULL,
`word_spacing` varchar(255) collate utf8_bin default NULL,
`z_index` varchar(255) collate utf8_bin default NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=96 DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=96 ;
I have used enum sets for the most common CSS elements according to CSS2 standards set forth by W3C. The use of enums allows the views to implement a select tag based on the enum sets.
Also please note that the column names follow CakePHP naming conventions, which actually breaks the naming conventions for CSS2. We take care of this in the controller, which is the next page in this article.
The actual model for this is simple and straight forward. There is no data validation implemented as of yet, but will be in future versions
Model Class:
Download code
<?php
class DynaCss extends AppModel {
var $name = "DynaCss";
}
?>
I have also used a modified version of Baked Enums getEnumList() function implemented into the AppModel File for setting select option values based on enum sets.
Download code
/**
* Retrieve a list of enum values for a specific field
*
* @param string
* @return array
*/
function getEnumList($fldName){
$fldInfoArray = $this->_tableInfo->findIn( 'name' , $fldName );
foreach($fldInfoArray as $fldInfo)
break;
$lParenPos = strpos($fldInfo['type'], '(');
$rParenPos = strpos($fldInfo['type'], ')');
if (false != $lParenPos) {
$type = substr($fldInfo['type'], 0, $lParenPos);
$fieldLength = substr($fldInfo['type'], $lParenPos + 1, $rParenPos - $lParenPos - 1);
$enumValues = split(',', $fieldLength);
foreach($enumValues as $key => $enum) {
$enum = trim($enum, "'");
$enums[$enum] = $enum;
}
}else{
$enums = array();
}
return $enums;
}
Latest Comments