value array, ie: array('title'=>'My Plugin Title') */
abstract function getDefaults();
/** Title field to retrieve from options */
function getTitleField(){ return 'title'; }
/***********************************************************
** Static Functions
***********************************************************/
/** Register the Widget using Wordpress Actions */
static function init($classname=null,$class_id = null){
if (is_null($classname)){
$classname= get_called_class();
}
add_action( 'widgets_init', create_function('', 'return register_widget("'.$classname.'");') );
}
/***********************************************************
** Wordpress Hooks
***********************************************************/
/** Class constructor */
function SkeletWidget_Factory(){
$widget_ops = $this->getDefaults();
$control_ops = array('width' => 400);
parent::__construct($this->getID(), $this->getName(), $widget_ops, $control_ops);
}
/** Admin Dashboard Form */
function form($instance) {
$instance = $this->parse_args( $instance );
echo $this->getForm($instance);
}
/** Widget Code */
function widget($args, $instance) {
extract($args);
$tfld = $this->getTitleField();
echo $before_widget;
if ( ! empty( $instance['title'] ) ) {
echo $args['before_title'] . apply_filters( 'widget_title', $instance['title'] ). $args['after_title'];
}
$tpl = $this->getTemplate();
if(!empty( $tpl )){
if(isset($tpl["walker_class"])){
if(isset($tpl["walker_class"]["path"]) && file_exists($tpl["walker_class"]["path"])){
include_once($tpl["walker_class"]["path"]);
}
if(isset($tpl["walker_class"]["name"]) && class_exists($tpl["walker_class"]["name"])){
$tpl["id"] = str_replace('-','_',$this->id);
$tpl["id_base"] = str_replace('-','_',$this->id_base);
new $tpl["walker_class"]["name"]($tpl,$instance);
}else{
echo "Invalid class name or Walker class not declared.";
}
}
}
echo $after_widget;
}
/** Called By Wordpress when saving settings */
function update($new_instance, $old_instance) {
$instance = $old_instance;
$new_instance = $this->parse_args( $new_instance );
foreach($new_instance as $k=>$v){
if(!is_array($v)){
$instance[$k] = strip_tags($v);
}else{
$instance[$k] = $v;
}
/*
if (empty($instance[$k]) && !empty($def[$k])){
$instance[$k] = $def[$k];
}*/
}
foreach($instance as $k => $v){
$instance[$k] = $new_instance[$k];
}
return $instance;
}
/***********************************************************
** Utility Functions
***********************************************************/
/** Return an input type=text field ready for admin dashboard */
function getForm_input($instance, $name, $title=null){
if (is_null($title)) { $title=ucwords($name); }
return ''.
'';
}
/** Return a textarea ready for admin dashboard */
function getForm_textarea($instance, $name, $title=null){
if (is_null($title)) { $title=ucwords($name); }
return ''.
'';
}
/** Simplify wp_parse_args */
function parse_args($instance){
return wp_parse_args( (array)$instance, $this->getDefaults());
}
}
class SkeletFramework_Widget{
public static function instance($options = array()){
foreach($options as $option){
$widget_name = isset($option["title"])?$option["title"]:"";
$widget_id = isset($option["name"])?str_replace(" ","",str_replace("-","",ucfirst($option["name"]))):"";
$widget_description = !empty($option["description"])?$option["description"]:"";
$arr_default_settings = array();
if(!isset($option["settings"]))
$option["settings"] = array();
foreach ($option["settings"] as $key) {
if(isset($key["default"])){
$arr_default_settings[$key["name"]] = $key["default"];
}
}
$serialize = serialize($arr_default_settings);
$serialize_settings = !empty($option["settings"])?serialize($option["settings"]):"";
$serialize_template = !empty($option["frontend_tpl"])?serialize($option["frontend_tpl"]):"";
eval("
if(!class_exists('SkeletFramework_$widget_id')){
class SkeletFramework_$widget_id extends SkeletWidget_Factory {
function getTemplate(){ return unserialize('$serialize_template');}
function getID(){ return '$widget_id'; }
function getName(){ return '$widget_name';}
function getForm(\$instance){
\$instance = wp_parse_args( \$instance, unserialize('$serialize'));
\$fields = unserialize('$serialize_settings');
foreach(\$fields as &\$field ){
if(!empty(\$field)){
if(isset(\$field['control']['type']) && \$field['control']['type'] == 'switcher' ){
\$field['switch_default'] = isset(\$field['default'])?\$field['default']:'';
\$field['default'] = '';
}
\$value = isset(\$instance[\$field['name']])? \$instance[\$field['name']] :null;
\$name = isset(\$field['name'])?\$this->get_field_name(\$field['name']):'';
\$field = array_filter(array(
'id' => \$name,
'name' => \$name,
'title' => isset(\$field['control']['label'])?\$field['control']['label']:null,
'info' => isset(\$field['info'])?\$field['info']:null,
'default' => !empty(\$field['default'])?\$field['default']:null,
'type' => isset(\$field['control']['type'])?\$field['control']['type']:null,
'desc' => isset(\$field['control']['info'])?\$field['control']['info']:null,
'options' => isset(\$field['control']['options'])?\$field['control']['options']:null
));
if(isset(\$field['control']['type']) && \$field['control']['type'] == 'switcher' ){
array_push(\$field, array('default' => isset(\$field['switch_default'])?true:false));
}
if(!empty(\$field)){
echo sk_add_element( \$field, \$value );
}
}
}
}
function getContent(\$instance,\$args = null){
return '';
}
function getDefaults(){
return array(
'title' => __(\$this->getName()),
'description' => __('$widget_description')
);
}
}
\$widget = new SkeletFramework_$widget_id();
\$widget::init();
} ");
}
}
}