Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
/**
* Created by JetBrains PhpStorm.
* Development: Max Znamensky
* Date: 31.07.12
* Time: 17:45
* To change this template use File | Settings | File Templates.
*/
namespace Blog;
use Fuel\Core\View;
use Fueltools\Pagination;
class Controller_Base extends \Fuel\Core\Controller_Template
{
public $template = 'index';
public $site_name;
public $catArr;
public $postArr;
public function before()
{
parent::before();
//Инициализация постоянно используемых данных, таких как модели, массивы с данными
$this->postArr = \Fuel\Core\DB::select('*')->from('posts')->cached(600)->execute()->as_array();
$this->catArr = \Fuel\Core\DB::select('*')->from('categories')->cached(600)->execute()->as_array();
$this->site_name = \Fueltools\StrConverter::upperFirst($_SERVER['HTTP_HOST']);
//Назначает виджеты по умолчанию
$this->widgetMenuLinks();
$this->widgetMasthead();
$this->widgetRndmLinks();
$this->widgetRndmPosts();
$this->widgetSearch();
$this->setIndexVars();
//$this->template->set_global('breadcrumbs', \Fueltools\Breadcrumb::create_links(), false);
}
protected function setIndexVars()
{
$this->template->site_name = $this->site_name;
}
/**
* Pagination
*/
protected function getPager($url, $total, $per_page, $segment)
{
$config = array(
'pagination_url' => $url,
'total_items' => $total,
'per_page' => $per_page,
'uri_segment' => $segment,
);
Pagination::set_config($config);
$pagination = Pagination::create_links();
$this->template->pager = $pagination;
}
/**
* Формирует виджет меню категорий в top menu
*/
protected function widgetMenuLinks()
{
$data = $this->catArr;
$catMenu = \Fueltools\TreeToMenu::forge()->_buildTree($data);
$this->template->catsmenu = $catMenu;
}
/**
* Формирует виджет с рандомными ссылками
*/
protected function widgetRndmLinks()
{
$data = $this->catArr;
shuffle($data);
$this->template->footerLinks = View::forge(
'widgets/footer_random_links',
array('links' => array_splice($data, 0, 5))
);
}
/**
* Формирует виджет Masthead
*/
protected function widgetMasthead($data = array())
{
$catArr = $this->catArr;
shuffle($catArr);
$data['links'] = array_splice($catArr, 0, 40);
$this->template->widget_masthead = View::forge('widgets/masthead', $data);
}
/**
* Формирует виджет правого блока на главной и в категориях
* @param $offset - кол-во выводимых статей
*/
protected function widgetRndmPosts($offset = 5)
{
$data = $this->postArr;
//\Fueltools\FB::info($posts);
shuffle($data);
$this->template->widget_rndmposts = View::forge(
'widgets/thumbnails',
array('posts' => array_splice($data, 0, $offset))
);
}
/**
* Виджет формы поиска
*/
protected function widgetSearch()
{
$this->template->search_form = View::forge('widgets/search/form');
}
}
<?php
return array(
'_root_' => 'blog', // The default route
'blog/(:num)' => 'blog/posts/$1', // The default route
'blog/category/(:num)-(:num)-(:any)' => 'blog/category/$1/$2/$3', // The default route
'_404_' => 'index/404', // The main 404 route
);
<?php
/**
* Created by JetBrains PhpStorm.
* Development: Max Znamensky
* Date: 01.08.12
* Time: 14:54
* To change this template use File | Settings | File Templates.
*/
namespace Blog;
class Model_Post extends \Orm\Model
{
protected static $_properties = array(
'id',
'title',
'short_content',
'content',
'created_at',
'author_id',
'cat_id',
'anchors',
'youtube',
);
protected static $_belongs_to = array(
'user' => array(
'key_from' => 'author_id'
),
'categorie' => array(
'key_from' => 'cat_id'
)
);
}
<?php
return array(
'_root_' => 'blog', // The default route
'blog/(:num)' => 'blog/posts/$1', // The default route
'blog/category/(:num)-(:num)-(:any)' => 'blog/category/$1/$2/$3', // The default route
'_404_' => 'index/404', // The main 404 route
);
<?php
/**
* Created by JetBrains PhpStorm.
* Development: Max Znamensky
* Date: 01.08.12
* Time: 14:54
* To change this template use File | Settings | File Templates.
*/
namespace Blog;
class Model_Post extends \Orm\Model
{
protected static $_properties = array(
'id',
'title',
'short_content',
'content',
'created_at',
'author_id',
'cat_id',
'anchors',
'youtube',
);
protected static $_belongs_to = array(
'user' => array(
'key_from' => 'author_id'
),
'categorie' => array(
'key_from' => 'cat_id'
)
);
}
— Получилась гибкое приложение, где почти вся мало мальски реюзабельная логика перенесена в отдельные пакеты с целью реюзать её в следующих проектах. Пакеты это нечто постоянное и переносимое из проекта в проект. Делаешь раз и решение никуда не пропадает — это действительно потрясающе.
— Сами контроллеры лишь выполняют проверки и направляют действия.
— Большое преимущество пакетов в том, что вы можете реюзать логику везде, в шаблоне, в контроллере, в модуле.
— За все время использования фримворка обновлял ядро несколько раз — обратная совместимость не ломалась, обновление сводилось к копипасту с заменой папки core.
— Fuel на столько прост на сколько того хочешь, например я мало использую unit тестирование, oil console, разделение разработки на dev и production, oil migration и многое другое. Но я знаю одно — когда они мне понадобятся, то я с легкостью начну их применять, так как в Fuelphp нет ничего сложного.
The framework was started in late 2010 by Dan Horrigan then shortly after the team grew to include Phil Sturgeon, Jelmer Schreuder and Harro Verton. The team has decades of PHP experience between them and have all been involved with Open-Source projects such as CodeIgniter, PyroCMS, ExiteCMS and DataMapper ORM to name but a few.
Делаешь раз и решение никуда не пропадает — это действительно потрясающе.
Большое преимущество пакетов в том, что вы можете реюзать логику везде, в шаблоне, в контроллере, в модуле
я мало использую unit тестирование, oil console, разделение разработки на dev и production, oil migration и многое другое. Но я знаю одно — когда они мне понадобятся, то я с легкостью начну их применять, так как в Fuelphp нет ничего сложного
<? foreach ($posts as $post) { ?>
<h1><? echo Html::anchor(
\Fueltools\RepeateBlog::postLink($post), // Тут
$post->title,
array('title' => $post->title)
)?></h1>
<div class="row-fluid">
<article>
<p class="muted">
<span class="label label-info"><? echo \Date::time_ago(strtotime($post->created_at)) ?></span>
</p>
<p><? echo \Str::truncate(strip_tags($post->content), 600) ?></p>
</article>
</div>
<hr class="soften">
<? } ?>
A lot of text for <?=$user->getName()?>
ок я только за, как вы предлагаете решить с циклом ведь данные дергаются внутри foreach() Перенести цикл целиком в контроллер или как? Буду благодарен за дельные рекомендации.
Fuelphp в полевых условиях