Listing To Do
The best way to fetching items with varieties of criteria is using service:
Put simply, a service is any PHP object that performs some sort sorts of "global" task. It's a purposefully-generic name used in computer science to describe an object that's created for a specific purpose (e.g. delivering emails). Each service is used throughout your application whenever you need the specific functionality it provides. You don't have to do anything special to make a service: simply write a PHP class with some code that accomplishes a specific task. Congratulations, you've just created a service!
IndexController will listing to do do items using Search, Browse and Pager Service.
- Search: Generate search bar
- Browse: Control how to query database
- Pager: Control paginator
...
Code Block | ||||
---|---|---|---|---|
| ||||
// register service $module->addServiceNames([ 'todolisttodo.browse'=> Service\Browse::class, ]); |
...
Code Block | ||||
---|---|---|---|---|
| ||||
<?php namespace Apps\TodoList\Controller; use Phpfox; use Phpfox_Pager; //controllers Index controller must be a child of \Phpfox_Component class. // class IndexController extends \Phpfox_Component { public function process() { // Get phpFox core template service $template = $this->template(); // set view title $template->setTitle('To Do List'); // set view breadcrumb $template->setBreadCrumb('To Do List', $this->url()->makeUrl('to-do-list')); // add your section menus $template->buildSectionMenu('to-do-list', [ 'Browse' => $this->url()->makeUrl('/to-do-list'), 'Create' => $this->url()->makeUrl('/to-do-list/add'), ]); $template->menu('Add To Do', $this->url()->makeUrl('/to-do-list/add')); // set is in profile $bIsProfile = false; // Configure search form $search = $this->search(); // get current view $sView = $this->request()->get('view'); // form action $sFormAction = $this->url()->makeUrl('to-do-list', ['view' => $sView]); $search->set([ 'type' => 'todo', 'field' => 'todo.task_id', 'ignore_blocked' => true, 'search_tool' => [ 'table_alias' => 'todo', 'search' => [ 'action' => $sFormAction, 'default_value' => '', 'name' => 'search', 'field' => ['todo.name'], ], 'sort' => [ 'latest' => ['todo.time_stamp', _p('Latest')], 'most-liked' => ['todo.total_like', _p('Most Liked')], ], 'show' => [10, 20, 30], ], ]); // Configure search service $aBrowseParams = [ 'module_id' => 'todo', 'alias' => 'todo', 'field' => 'task_id', 'table' => Phpfox::getT('todolist_task'), 'hide_view' => ['pending', 'my'], ]; $search->setContinueSearch(true); $search->browse()->params($aBrowseParams)->execute(); $cnt = $search->browse()->getCount(); $aItems = $search->browse()->getRows(); // register pager service Phpfox_Pager::instance()->set([ 'page' => $search->getPage(), 'size' => $search->getDisplay(), 'count' => $search->browse()->getCount(), ]); // assign variables to template $this->template()->assign([ 'iCnt' => $cnt, 'aItems' => $aItems, 'sSearchBlock' => _p('search to do'), 'bIsProfile' => $bIsProfile, 'sTaskStatus' => $this->request()->get('status'), 'sView' => $sView, ] ); } } |
...
Code Block | ||||
---|---|---|---|---|
| ||||
{if !count($aItems)} {if !PHPFOX_IS_AJAX} <div class="extra_info"> {_p var='no_to_to_list_item_found'} </div> {/if} {else} {if !PHPFOX_IS_AJAX} <div class="item-collections item-collections-2"> {/if} {foreach from=$aItems name=aItem item=aItem} <article> <a href="{ permalink module='todolisttodo.view' id=$aItem.task_id title=$aItem.name }"><h4>{$aItem.name}</h4></a> <p>{$aItem.description}</p> <abbr> <span>Status:</span><span> { if $aItem.task_status >0 }complete{else}in-complete{/if} </span><br/> <span>Created:</span><span> {$aItem.time_stamp|convert_time} </span><br/> </abbr> </article> {/foreach} {pager} {if !PHPFOX_IS_AJAX} </div> {/if} {/if} |
...