Просмотр файла inc/classes/widget.class.php

Размер файла: 12.08Kb
<?php
/*
php -f /home/u247889851/public_html/libraries/bitfolge/feedcraetor.php
Класс реализации виджетов в каталоге 
Параметры виджета (не путать с настройками виджета):|
-----------------------------------------------------
отображение:
Для виджетов есть несколько мест отображения 
top - отбражение в шапке сайта на всех страницах
buttom - отбражение в низу сайта на всех страницах
main - На главной странице
main_admin - На главной странице админки
cat - В категориях каталога в верху
cat_down -  В категориях каталога в низу
site - В описании сайта 
news_sl - Между короткой и длинной новостью
news_down - Под новостью
seo - В seo показателях сайта
review - В отзывах к сайту
faq_main - под правилами для сайта
smileys - под faq смайлам
bbcode - под faq по bb-кодам
stat - под статистикой сайта
about - На странице с контактами

$Widget->load_Widgets('about');

---------
-
Позиция: 
Так как теоритически в одном месте могут 
отбражаться несколько разных виджетовто,
был предусмотрен параметр Позиция который
определяет какой из виджетов следует показывать
выше а какой ниже.

----------
Статус: Этот параметр определяет включен виджет или нет.

-----------------------------------------------------
Настройки виджета: 									|
-----------------------------------------------------
Виджеты могут выполнять PHP код и использовать все
функции прописаные в файле func.php, такая функциональность
предпалогает что виджет может использовать свои дополнительные
параметры. Таким образом  чтобы каждый виджет не создавал
собственную таблицу в базе данных тем самым засоряя её,
была создана специальная ячейка в уже имеющейся таблице
которая заполняется исключтельно настройками соответствуещего
виджета, которые потом можно легко извлечь или перезаписать. 

-----------------------------------------------------
Функция записи настроек:
set_widget_settings($Widget_Name,$array) - Функция записывает массив с настройками виджета
В первом патаметре следует указать имя виджета
В втором параметре массив с настройками
пример использования:

$array['parametr1'] = 'Привет'; //указываем первый параметр (parametr1) 
$array['parametr2'] = 'Мир!'; 	//указываем второй параметр (parametr2) 
$WIDGET= new Widget();
if($WIDGET->set_widget_settings($Widget_Name,$array)){
echo 'Настройки сохранены!';
} else {
echo 'Не удалось сохранить настройки!';
}


----------------------------------------------------
Функция получения настроек:
get_widget_settings($Widget_Name) - Функция получает настройки виджета в виде массива
В качестве параметра следует указать имя виджета 
использовать так:
$WIDGET= new Widget();
$WtestSet=$WIDGET->get_widget_settings('test');
echo $WtestSet['parametr1'];
echo $WtestSet['parametr2'];
----------------------------------------------------

Создание виджета:
Виджет должен состоять минимум из __ обязательных файлов
widget.php - Исполнительный файл виджета
install.php - Файл для быстрой установки виджета из админки
settings.php - Файл для изменения настроек виджета в админке
эти файлы должны лежать в одной папке названной именем самого виждета

*/


class Widget {
public $dir;
public $positions_for_widget=array(
'top'=>'отбражение в шапке сайта на всех страницах',
'buttom'=>'отбражение в низу сайта на всех страницах',
'main'=>'На главной странице',
'about'=>'На странице с контактами',
'main_admin'=>'На главной странице админки',
'cat'=>'В категориях каталога в верху',
'cat_down'=>' В категориях каталога в низу',
'site'=>'В описании сайта',
'news_sl'=>'Между короткой и длинной новостью',
'news_down'=>'Под новостью',
'seo'=>'В seo показателях сайта',
'review'=>'В отзывах к сайту',
'faq_main'=>'под правилами для сайта',
'smileys'=>'под faq смайлам',
'bbcode'=>'под faq по bb-кодам',
'stat'=>'под статистикой сайта'
	);
	
    public function __construct($dir) { $this->dir = $dir.'/inc/widgets/';	}

# Установка виджета
function install_widget($name,$place,$position=0,$settings="",$status=1,$data=""){
$sql="INSERT INTO `widgets` (`name`, `place`, `position`, `settings`, `status`, `data`) VALUES ('{$name}', '{$place}', '{$position}', '{$settings}', '{$status}', '{$data}');";
if(mysql_query($sql)){ return 1; }else { return mysql_error();}
}

# Список не установленных виджетов #
function noninstall(){
$skip = array('.', '..');
$files = scandir($this->dir);
$sql="SELECT `name` FROM `widgets`";
$count_sql="SELECT COUNT(*) FROM `widgets`";
$count=@mysql_result(mysql_query($count_sql), 0);
if($count>0){ $result = mysql_query($sql); while ($m = mysql_fetch_assoc($result)) { $skip[]=$m['name']; } }
//----------------------------------------
foreach($files as $file) { if(!in_array($file, $skip)) { if(is_dir($this->dir.$file)){ $directories[]=$file;} } }
return $directories;

}

#Проверка виджета на присутствие всех необходимых файлов#
function scan_widget($name){
if(!file_exists($this->dir.$name.'/install.php')){ $error[]="Отсутствует файл install.php";}
if(!file_exists($this->dir.$name.'/readme.txt')){$error[]="Отсутствует файл readme.txt";}
if(!file_exists($this->dir.$name.'/settings.php')){$error[]="Отсутствует файл settings.php";}
if(!file_exists($this->dir.$name.'/widget.php')){$error[]="Отсутствует файл widget.php";}
if(!empty($error)){ return $error; }else{ return true;}
}
	
# Список всех виджетов status означает какие виджеты следует отбразить
function widget_list($status=0){
$status=intval($status);
if($status==0){#Только выключенные виджеты
$sql="SELECT * FROM `widgets` WHERE `status`=0";
$count_sql="SELECT COUNT(*) FROM `widgets` WHERE `status`=0";
} elseif($status==1){#Только включенные виджеты
$sql="SELECT * FROM `widgets` WHERE `status`=1";
$count_sql="SELECT COUNT(*) FROM `widgets` WHERE `status`=1";
} elseif($status==2){ #Все виджеты 
$sql="SELECT * FROM `widgets`";
$count_sql="SELECT COUNT(*) FROM `widgets`";
}
$count=mysql_result(mysql_query($count_sql), 0);
$widget_list="";
if($count>0){

$result = mysql_query($sql);
while ($m = mysql_fetch_assoc($result)) {

$WIdg_pos="";
foreach($this->positions_for_widget as $key => $value){ $WIdg_pos .= "<option ".($m['place'] == $key ? 'selected' : '')." value=\"{$key}\">{$value}</option>"; }
$widget_list.="<div clsss=\"title\">
Виджет  - <b>{$m['name']}</b> <a href=\"widgets.php?mod=set&wn={$m['name']}\">Настроить</a><br />
<form action=\"\" method=\"post\">
<input type=\"hidden\" name=\"name\" value=\"{$m['name']}\" /> 
<p><b>Место отображения</b><br/>
<select name=\"place\">
<option disabled>Выберите место отображения</option>
{$WIdg_pos}
</select>
</p>
<p><b>Позиция</b><br/> <input type=\"text\" size=\"5\" name=\"position\" value=\"{$m['position']}\" /></p>
".($m['status'] == 1 ? '<img src="'.$home.'/images/green.png" alt="on"/>' : '<img src="'.$home.'/images/red.png" alt="off"/>')."
<b>Статус виджета</b> :<br/>
<input type=\"radio\" value=\"1\" name=\"status\" " . ($m['status'] == 1 ? 'checked="checked"' : '') . " />Вкл<br />
<input type=\"radio\" value=\"0\" name=\"status\" " . ($m['status'] == 0 ? 'checked="checked"' : '') . "/>Выкл<br />
<input type=\"submit\" name=\"submit\" value=\"Изменить\" /> 
</form>
<hr/>
<div/>
";

}
}else{ $widget_list.='В этой категории нет виджетов'; }
return $widget_list;
}
#Сохранить параметры виджета
function set_widget_parm($name="",$array){
$status=intval($array['status']);
$position=intval($array['position']);
$place=$array['place'];
if($name==""){ throw new Exception('Не указано имя виджета!'); }else{
$sql="UPDATE `widgets` SET `status` = '{$status}',`position` = '{$position}',`place` = '{$place}' WHERE `name` = '{$name}' LIMIT 1;";
if(mysql_query($sql)){ return 1; } else {throw new Exception(mysql_error());} } 
}


#Получить насторйки виджета
function get_widget_settings($name=""){
if($name==""){ throw new Exception('Не указано имя виджета!'); }
else { $sql="SELECT `settings` FROM `widgets` WHERE `name`='{$name}' LIMIT 1;";}
return unserialize(mysql_result(mysql_query($sql),0,'settings'));
}


#Сохранить Насторйки виджета
function set_widget_settings($name="",$array){
if($name==""){ throw new Exception('Не указано имя виджета!'); }else{
$newsettngs = serialize($array);
if(mysql_query("UPDATE `widgets` SET `settings`= '{$newsettngs}' WHERE `name` = '{$name}' LIMIT 1;")){
return true;
} else {throw new Exception(mysql_error());} } 
}

#Сохранить данные виджета
function set_widget_data($name="",$data){
if($name==""){ throw new Exception('Не указано имя виджета!'); }else{
if(mysql_query("UPDATE `widgets` SET `data`= '{$data}' WHERE `name` = '{$name}' LIMIT 1;")){
return true;
} else {throw new Exception(mysql_error());} } 
}

#Получить данные виджета
function get_widget_data($name=""){
if($name==""){ throw new Exception('Не указано имя виджета!'); }
else { $sql="SELECT `data` FROM `widgets` WHERE `name`='{$name}' LIMIT 1;";}
return mysql_result(mysql_query($sql),0,'data');
}

#Загрузка виджета
function load_widget($name=""){
if($name==""){ throw new Exception('Не указано имя виджета!'); }
return $name;
}

#Загрузка виджетов для определеннго места
function load_Widgets($place,$SPECIAL_DATA=""){
$count_sql="SELECT COUNT(*) FROM `widgets` WHERE `place`='{$place}' AND `status`='1';";
$sql="SELECT * FROM `widgets` WHERE `place`='{$place}' AND `status`='1';";

$count=@mysql_result(mysql_query($count_sql), 0);
$widget_list="";
if($count>0){
$result = mysql_query($sql);
while ($m = mysql_fetch_assoc($result)) {
if(file_exists($this->dir.$m['name'].'/widget.php')){
require_once($this->dir.$m['name'].'/widget.php');
}}}

}	
		
}
?>