Pull to refresh

Простой php фреймворк для начинающих

Доброго времени суток Хабровчане.

Представляю вашему вниманию супер простой php фреймворк. В нем только самое основное, что нужно для простых блогов.

Структура директорий:

Index.php
/assets/
/framework/php/
/framework/html/
/framework/system/

Итак, поехали:
Начнем с парадной двери — index.php
Вообщем отказался напрочь от html кода в индексе, так как это неудобно.
Для head или footer решил сделать отдельные функции, так как для них писать одну универсальную функцию слишком запутано получиться. Зато теперь для каждого из них можно подключать дополнительно разные примочки типа галерею.

<?
require_once("/framework/system/system.class.php");
$version = 'default';
$base = new base;
$section = new content;

$base::head();

$base::header();

$base::nav();

$section::control();

$base::footer();

echo memory_get_usage();
 
?>


Далее сами классы:

Название классов и функции говорят сами за себя, все просто, думаю даже начинающий поймет для чего они предназначены.

<?
$first=$_GET['first'];
$first = strip_tags($first);
 
$second=$_GET['second'];
$second = strip_tags($second);
 
$third=$_GET['third'];
$third = strip_tags($third);

$base_lang = 'ky';
$lang = stripcslashes($GLOBALS['first']);

$db = mysql_connect ("localhost","root","");
mysql_select_db ("test",$db);
mysql_query("SET NAMES 'utf8'");
<cut />
		
class content
{
	public function control()
	{
		$second = $GLOBALS['second'];		
		$base = new base;		
		$sth = mysql_query("SELECT * FROM page WHERE url='$second' ");
		
		while ($row = mysql_fetch_array($sth))
			{
				$title = $row['title'];				
				$html = $row['html'];				
			}
			
		switch ($second) 
		{
			case '': require_once('/framework/html/home.html');
			break;
			
			case "news":  require_once('/framework/html/news.html');			
			break;
			
			case "contacs": require_once('/framework/html/contacs.html');
			break;
			
			default : require_once('/framework/html/single-page.html');
			break;	
		}
	}
}

// шаблонизатор

class html 
{
	public function get_html($file_name)
	{
		require_once('/framework/html/'.$file_name.'.html');
	}
}

// конец

class database
{
	public function connect()
	{
		$db = mysql_connect ("localhost","root","");
		mysql_select_db ("test",$db);
		mysql_query("SET NAMES 'utf8'"); 			
	}
}


class control_url
{
	public function only_second($class,$function)
	{
		if(!empty($GLOBALS['second']) and empty($GLOBALS['third']))
		{
			$class = new $class;
			$class :: $function(); // вызов функций первого уровня
		}
	}	
	
	public function only_third($class,$function)
	{
		if(!empty($GLOBALS['third']))
		{
			//print 'second url only';
			$class = new $class;
			$class :: $function(); // вызов функций второго уровня
		}
	}	
}

class news
{	
		public function news_list()
	{			
		$lang = stripcslashes($GLOBALS['lang']);
		$news = mysql_query("SELECT * FROM news ");
		while ($row = mysql_fetch_array($news))
		{
			$title = $row['title'];
			$img = $row['img'];
			$html = $row['html'];
			$url = $row['id'];
			include('/framework/html/news_list.html');								
		}		
	}		
	
	public function single_news()
	{
		$id = $GLOBALS['third'];		
		$news = mysql_query("SELECT * FROM news WHERE id='$id' ");
		while ($row = mysql_fetch_array($news))
		{
			$title = $row['title'];
			$img = $row['img'];
			$html = $row['html'];
			include('/framework/html/single-news.html');								
		}		
	}	
}
	
class base 
{
	
	
	public function breadcums()
	{
			
	}
	
	
	public function head()
	{
		$second = $GLOBALS['second'];
		$third = $GLOBALS['third'];
		$sth = mysql_query("SELECT * FROM page  WHERE url='$second' ");
		while ($row = mysql_fetch_array($sth))
			{
				$title = $row['title'];				
				$description = $row['description'];				
				$keywords = $row['keywords'];				
			}
		require_once('/framework/html/head.html');		
	}	
	
	
	public function footer()
	{
		$html = new html;
		$html :: get_html('footer','');		
		
	}
	
	public function header()
	{
		$html = new html;
		$html :: get_html('header','');		
		
	}
	
	public function nav()
	{		
		$html = new html;
		$lang = stripcslashes($GLOBALS['lang']);		
		require_once('/framework/html/nav_'.$lang.'.html');		
	}
	
	public function not_found($title)
	{
		if(empty($title))
		{
			require_once('/framework/html/404.html');
		}		
	}	
}
		
?>


А теперь сами HTML файлы: news_list.html

Как вы видите в html нет функций, только переменные. Вообще идея была по максимуму не использовать php код в html. И наоборот вообще не использовать html в php.

Данный код выводит новостные блоки в разделе новости, по нажатию перенаправляет на страницу для полного чтения.

<div class="col-md-4 left">
  <div class="box">
    <div class="image">
	 <img src="/uploads/news/<? print $img; ?>" />
	</div>
	<div class="text center">
	 <h3 class="head"<? print $title; ?> </h3>
	  <a href="/<? print $lang; ?>/news/<? print $url; ?>">
<p class="context"><? print iconv_substr(strip_tags($html), 0 , 200 , 'utf-8' );?>
</p></a>
	</div>
  </div>
</div>	

А вот вывод статичных страниц:

Выводит такие страницы как: О нас, контакты. Но при желании тут можно подключить модули
просто вставив к примеру module :: galery('about');

<div class="col-md-8 left">
<div class="box">
<div class="image">
<img src="/assets/images/360x180.jpg" />
</div>	   
<div class="text center">
<h3 class="head"><? print $title; ?></h3>
<p class="context"><? print $html; ?></p>
</div>	   
</div>
</div>	
<cut />

Итог: данный фреймворк выполняет по умолчанию самые основные функции для создания сайта визиток или блога. HTML и PHP практически полностью отделены друг от друга. Основным критерием была простота. Для того чтобы на нем работали несколько сложных приложений надо сделать базовые функции более универсальными.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.