-
Notifications
You must be signed in to change notification settings - Fork 16
Hiding and replacing the content of a block
In the previous page, you learned how to dynamically generate content by repeating and valorizing many times a static content of a block. Another interesting feature you can do with a block is the capability to hide or to replace its content.
By supposing that:
- We want to hide the users' list of the previous
templates\users_manager.html.tpl
, statically defined using a block namedUsers
. - We want to replace the users' table with a message "Sorry, you are not allowed to access users' list" for simulating a protected information.
For this purpose, we add a new block called ContenUsers
in the template. See the template code below:
<!DOCTYPE html>
<html>
<head>
<title>Users list</title>
</head>
<body>
<h1>Users list</h1>
<!-- BEGIN ContenUsers -->
<table>
<thead>
<tr>
<th>User</th>
<th>Email</th>
<tr>
</thead>
<tbody>
<!-- BEGIN Users -->
<tr>
<td>{UserName}</td>
<td>{UserEmail}</td>
</tr>
<!-- END Users -->
</tbody>
</table>
<!-- END ContenUsers -->
</body>
</html>
The view views\UsersManager
will remain the same of the previous example
<?php
namespace views;
use framework\View;
class UsersManager extends View
{
/**
* @override framework\View __construct()
*/
public function __construct($tplName = null)
{
if (empty($tplName)) {
$tplName = "/users_manager";
}
parent::__construct($tplName);
}
/**
* Shows the given $user in the block Users
* of tempalates\users_manager.html.tpl
*
* @param array $users Array of users in the format
* array(array('Username'=>,'UserEmai'=>''))
*/
public function setUsersBlock($users)
{
$this->openBlock("Users");
foreach ($users as $user) {
$this->setVar("UserName", $user["UserName"]);
$this->setVar("UserEmail", $user["UserEmail"]);
$this->parseCurrentBlock();
}
$this->setBlock();
}
}
Now we need to update the controllers\UsersManager
by adding two methods: hideUsers
and disallowUsers
. See the code:
<?php
namespace controllers;
use framework\Controller;
use views\UsersManager as UsersManagerView;
class UsersManager extends Controller
{
/**
* @override framework\Controller __construct()
*/
public function __construct()
{
$this->view = new UsersManagerView();
parent::__construct($this->view);
$users = $this->getUsersData();
$this->view->setUsersBlock($users);
}
/**
* Provides users data
*
* @return array Array of users in the
* format array(array('Username'=>,'UserEmai'=>''))
*/
private function getUsersData()
{
$users = array(
array('UserName' => 'Mark', 'UserEmail' => 'mark@email.com'),
array('UserName' => 'Elen', 'UserEmail' => 'elen@email.com'),
array('UserName' => 'John', 'UserEmail' => 'john@email.com')
);
return $users;
}
/**
* Hides users list
*/
public function hideUsers()
{
$this->hide("ContenUsers");
$this->render();
}
/**
* Disallows users list
*/
public function disallowUsers()
{
$this->view->openBlock("ContenUsers");
$this->view->setBlock("Sorry, you are not allowed to access users' list");
$this->render();
}
}
Now you can run the controller in three different ways:
1) By running http://localhost/users_manager
you will get the following users list:
User | |
---|---|
Mark | mark@email.com |
Elen | elen@email.com |
John | john@email.com |
2) By running http://localhost/users_manager/hide_users
you will get the following output:
3) By running http://localhost/users_manager/disallow_users
you will get the following output:
In this page, you learned how to use the hide($blockName)
method for hiding the content inside a block. You also learned another capability of the setBlock()
method. In fact by calling setBlock($text)
and by passing it a text message you can replace the content of an opened block with the given message.
In the next page, we speak about nesting blocks