В новой версии движка phpBB 3.1 создание страницы в стиле конференции в сущности сводится к созданию расширения.
Поехали!
Первым шагом следует создать структуру папок для вашего расширения. Для этого в папке ext создадим новую папку и назовем ее, например Sheer. Далее в этой папке создадим папку, например, mytest - здесь и будут находиться все файлы, необходимые для работы нашей страницы-расширения.
NB! в названии папок не допускаются тире и знаки подчёркивания!
В папке mytest в обязательном порядке должен находиться файл Файл composer.json. В нашем случае его содержимое будет таким:
Код: Выделить всё
{
"name": "Sheer/mytest",
"type": "phpbb-extension",
"description": "Description for my test",
"homepage": "http://phpbbguru.net",
"version": "0.0.1",
"time": "2014-01-11",
"license": "GPL-2.0",
"authors": [
{
"name": "Sheer",
"homepage": "http://phpbbguru.net",
"role": "Developer"
}
],
"require": {
"php": ">=5.3.3"
},
"extra": {
"display-name": "My Test extension",
"soft-require": {
"phpbb/phpbb": "3.1.*@dev"
}
}
}
NB! В имени вендора (разработчика - Sheer) и в имени проекта (mytest) должно быть не менее 2-х символов.
Далее в папке mytest создадим следующие папки:
config\
controller\
event\
language\ru\
styles\prosilver\template\event\
migrations\
На первом этапе не все потребуются, но мы создадим их загодя.
Далее в папке config создадим файл services.yml следующего содержания:
Код: Выделить всё
services:
Sheer.mytest.listener:
class: Sheer\mytest\event\listener
tags:
- { name: event.listener }
В папке event создадим файл подписчик на события или слушатель. Наличие подписчика обязательно. Назовем его listener.php
Код: Выделить всё
<?php
/**
*
* @package mytest
* @copyright (c) 2014 Sheer
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
namespace Sheer\mytest\event;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
/**
* Event listener
*/
class listener implements EventSubscriberInterface
{
/**
* Assign functions defined in this class to event listeners in the core
*
* @return array
* @static
* @access public
*/
static public function getSubscribedEvents()
{
return array();
}
}
Поздравляю, наше первое расширение создано, можно проверить, перейдя в Администраторский раздел "Персонализация-->Управление расширениями".
Создаем контроллер
Ну сделано-то сделано, вот только ничего оно не делает. Посему настало время сотворить нечто такое, чтобы на нашей странице чего-нибудь отображалось, ну хотя-бы сначала заголовок.
Итак, приступим. Сначала создадим html-шаблон страницы, назовем его mytest_body.html и запишем его в папку ext/Sheer/mytest/styles/prosilver/template
Код: Выделить всё
<!-- INCLUDE overall_header.html -->
<h2>{L_TEST_PAGE_TITLE}</h2>
<!-- INCLUDE overall_footer.html -->
NB! На время создания и отладки расширения включите перекомпиляцию шаблонов в Администраторском разделе: ОБЩИЕ-->Конфигурация сервера-->Нагрузка на сервер
Теперь следует объявить "языковую переменную"Перекомпилировать старые шаблоны: Да/Нет
Проверка обновлённых компонентов стилей и повторная их компиляция в случае необходимости.
TEST_PAGE_TITLE
. Для этого создадим файл с произвольным именем mytest_lng.php в папке ext/Sheer/mytest/language/ru (не забываем про кодировку UTF-8 без BOM)
Код: Выделить всё
<?php
/**
*
* @package phpBB Extension - My Test
* @copyright (c) 2013 phpBB Group
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
if (!defined('IN_PHPBB'))
{
exit;
}
if (empty($lang) || !is_array($lang))
{
$lang = array();
}
$lang = array_merge($lang, array(
'TEST_PAGE_TITLE' => 'Мой тест',
));
Код: Выделить всё
return array();
Код: Выделить всё
return array(
'core.user_setup' => 'load_language_on_setup',
);
Код: Выделить всё
public function load_language_on_setup($event)
{
$lang_set_ext = $event['lang_set_ext'];
$lang_set_ext[] = array(
'ext_name' => 'Sheer/mytest',
'lang_set' => 'mytest_lng',
);
$event['lang_set_ext'] = $lang_set_ext;
}
Код: Выделить всё
<?php
/**
*
* @package phpBB Extension - My test
* @copyright (c) 2013 phpBB Group
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
namespace Sheer\mytest\controller;
use Symfony\Component\HttpFoundation\Response;
class mytest
{
protected $config;
protected $db;
protected $auth;
protected $template;
protected $user;
protected $helper;
protected $phpbb_root_path;
protected $php_ext;
public function __construct(\phpbb\config\config $config, \phpbb\request\request_interface $request, \phpbb\pagination $pagination, \phpbb\db\driver\driver_interface $db, \phpbb\auth\auth $auth, \phpbb\template\template $template, \phpbb\user $user, \phpbb\controller\helper $helper, $phpbb_root_path, $php_ext, $table_prefix)
{
$this->config = $config;
$this->request = $request;
$this->pagination = $pagination;
$this->db = $db;
$this->auth = $auth;
$this->template = $template;
$this->user = $user;
$this->helper = $helper;
$this->phpbb_root_path = $phpbb_root_path;
$this->php_ext = $php_ext;
$this->table_prefix = $table_prefix;
}
public function main()
{
// Output the page
$this->template->assign_vars(array(
'TEST_PAGE_TITLE' => $this->user->lang('TEST_PAGE_TITLE'),
));
page_header($this->user->lang('TEST_PAGE_TITLE'));
$this->template->set_filenames(array(
'body' => 'mytest_body.html'));
page_footer();
return new Response($this->template->return_display('body'), 200);
}
}
Код: Выделить всё
Sheer_mytest_controller:
pattern: /mytest
defaults: { _controller: Sheer.mytest.controller:main }
Код: Выделить всё
services:
Код: Выделить всё
Sheer.mytest.controller:
class: Sheer\mytest\controller\mytest
arguments:
- @config
- @request
- @pagination
- @dbal.conn
- @auth
- @template
- @user
- @controller.helper
- %core.root_path%
- %core.php_ext%
- %core.table_prefix%
Sheer\mytest\controller\mytest
размещаются строго в том же порядке, в каком они перечислены в списке аргументов функции __construct.Затем физически чистим кеш и наберем в браузере http://localhost/phpBB31/app.php/mytest (или http://localhost/phpBB31/mytest, если активирован mod_rewrite веб-сервера Apache или другой серверный модуль перенаправления ссылок вместе с настройкой конференции "Настройки сервера - Включить URL Rewriting") (предполагается что конференция установлена на локальной машине в папке home/localhost/www/phpBB31) и... Ура! Заработало!
Рабор полетов
Теперь разберем наш контроллер mytest.php.
Список аргументов в функции __construct нашего класса mytest:
Код: Выделить всё
public function __construct(\phpbb\config\config $config, \phpbb\request\request_interface $request, \phpbb\pagination $pagination, \phpbb\db\driver\driver_interface $db, \phpbb\auth\auth $auth, \phpbb\template\template $template, \phpbb\user $user, \phpbb\controller\helper $helper, $phpbb_root_path, $php_ext, $table_prefix)
Код: Выделить всё
$this->config = $config;
$this->request = $request;
$this->pagination = $pagination;
$this->db = $db;
$this->auth = $auth;
$this->template = $template;
$this->user = $user;
$this->helper = $helper;
$this->phpbb_root_path = $phpbb_root_path;
$this->php_ext = $php_ext;
$this->table_prefix = $table_prefix;
Код: Выделить всё
protected $config;
protected $db;
protected $auth;
protected $template;
protected $user;
protected $helper;
protected $phpbb_root_path;
protected $php_ext;
Код: Выделить всё
class: Sheer\mytest\controller\mytest
arguments:
- @config
- @request
- @pagination
- @dbal.conn
- @auth
- @template
- @user
- @controller.helper
- %core.root_path%
- %core.php_ext%
- %core.table_prefix%
@template
нам пока не нужны, но востребуются в дальнейшем, поэтому включим их загодя.Как добавить ссылку в меню (навигацию) в шапке?
В самом деле, в навигацию нужно же добавить ссылку на нашу страницу. Для изменения шапки существует несколько событий, например:
- core.page_header
- core.page_header_after
- navbar_header_quick_links_after
- navbar_header_quick_links_before
- navbar_header_username_append
- navbar_header_username_prepend
- overall_header_navigation_prepend
Добавим в listener.php после
Код: Выделить всё
'core.user_setup' => 'load_language_on_setup',
Код: Выделить всё
'core.page_header' => 'add_page_header_link',
Код: Выделить всё
/**
* Constructor
*/
public function __construct(\phpbb\template\template $template, $phpbb_root_path)
{
$this->template = $template;
$this->phpbb_root_path = $phpbb_root_path;
}
Код: Выделить всё
public function add_page_header_link($event)
{
$this->template->assign_vars(array(
'U_MY_TEST' => append_sid("{$this->phpbb_root_path}mytest"),
));
}
Код: Выделить всё
<li class="small-icon icon-faq no-bulletin"><a href="{U_MY_TEST}">{L_TEST_PAGE_TITLE}</a></li>
После
Код: Выделить всё
class: Sheer\mytest\event\listener
Код: Выделить всё
arguments:
- @template
- %core.root_path%
Продолжаем разговор
Теперь надо придумать, что будет на нашей странице. Ну давайте список каких-то имен с телефонами из базы данных.
Ну вот так, например
Для этого нужно создать в базе данных конференции какую-то таблицу с ячейками id -- name -- phone с первичным ключем id,
причем таблица должна создаваться при установке нашего расширения автоматически. Для этого в папке ext/Sheer/mytest/migrations создадим файл, например version_0_0_1.php
Код: Выделить всё
<?php
/**
*
* @package phpBB Extension - My test
* @copyright (c) 2013 phpBB Group
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
namespace Sheer\mytest\migrations;
class version_0_0_1 extends \phpbb\db\migration\migration
{
public function effectively_installed()
{
return;
}
static public function depends_on()
{
return array('\phpbb\db\migration\data\v310\dev');
}
public function update_schema()
{
return array(
'add_tables' => array(
$this->table_prefix . 'my_test' => array(
'COLUMNS' => array(
'id' => array('UINT', null, 'auto_increment'),
'name' => array('VCHAR:255', ''),
'phone' => array('VCHAR:255', ''),
),
'PRIMARY_KEY' => 'id',
),
),
);
}
public function revert_schema()
{
return array(
'drop_tables' => array(
$this->table_prefix . 'my_test',
),
);
}
public function update_data()
{
return array(
// Current version
array('config.add', array('mytest_version', '0.0.1')),
);
}
}
Данные в таблице придется добавить вручную или при помощи SQL-запроса, например
Код: Выделить всё
INSERT INTO phpbb_my_test (name, phone) VALUES
('Вася', '375172232983'), ('Петя', '29717777'), ('Саша', '672242985'), ('Маша', '29710000'), ('Яша', '334442321'), ('Катя', '34876543');
Открываем ext/Sheer/mytest/styles/prosilver/template/mytest_body.html и после
Код: Выделить всё
<h2>{L_TEST_PAGE_TITLE}</h2>
Код: Выделить всё
<div class="forumbg forumbg-table">
<div class="inner">
<table class="table1 show-header responsive">
<thead>
<tr>
<th class="name">{L_NAME}</th>
<th class="name">{L_PHONE}</th>
</thead>
<tbody>
<!-- BEGIN row -->
<tr class="<!-- IF row.S_ROW_COUNT is even -->bg1<!-- ELSE -->bg2<!-- ENDIF -->">
<td>{row.NAME}</td>
<td>{row.PHONE}</td>
</tr>
<!-- END row -->
</tbody>
</table>
</div>
</div>
L_NAME
и L_PHONE
- открываем ext/Sheer/mytest/language/ru/mytest_lng.php и после
Код: Выделить всё
'TEST_PAGE_TITLE' => 'Мой тест',
Код: Выделить всё
'NAME' => 'Имя',
'PHONE' => 'Телефон',
Код: Выделить всё
$this->table_prefix = $table_prefix;
Код: Выделить всё
define(__NAMESPACE__ . '\MY_TEST_TABLE', $this->table_prefix . 'my_test');
Код: Выделить всё
$sql = 'SELECT *
FROM ' . MY_TEST_TABLE;
$result = $this->db->sql_query($sql);
while ($row = $this->db->sql_fetchrow($result))
{
$this->template->assign_block_vars('row', array(
'ID' => $row['id'],
'NAME' => $row['name'],
'PHONE' => $row['phone'],
));
}
Постраничный вывод
Теперь можно заняться совершенствованием расширения. Сначала добавим разбиение на страницы. Тут нужны правки только в коде шаблона, языкового файла и самого контроллера.
Итак, открываем mytest_body.html и добавляем
Код: Выделить всё
<div class="pagination">
{TOTAL_ITEMS}
<!-- IF .pagination -->
<!-- INCLUDE pagination.html -->
<!-- ELSE -->
• {PAGE_NUMBER}
<!-- ENDIF -->
</div>
<br clear="all" />
Код: Выделить всё
<h2>{L_TEST_PAGE_TITLE}</h2>
Код: Выделить всё
<!-- INCLUDE overall_footer.html -->
Код: Выделить всё
$sql = 'SELECT *
FROM ' . MY_TEST_TABLE;
$result = $this->db->sql_query($sql);
Код: Выделить всё
$start = $this->request->variable('start', 0);
$total_count = 0;
$per_page = 5;
$sql = 'SELECT COUNT(id) as total
FROM ' . MY_TEST_TABLE . '';
$result = $this->db->sql_query($sql);
$row = $this->db->sql_fetchrow($result);
$total_count = $row['total'];
$this->db->sql_freeresult($result);
$pagination_url = append_sid("{$this->phpbb_root_path}mytest");
$this->pagination->generate_template_pagination($pagination_url, 'pagination', 'start', $total_count, $per_page, $start);
$sql = 'SELECT *
FROM ' . MY_TEST_TABLE;
$result = $this->db->sql_query_limit($sql, $per_page, $start);
Код: Выделить всё
'TEST_PAGE_TITLE' => $this->user->lang('TEST_PAGE_TITLE'),
Код: Выделить всё
'TOTAL_ITEMS' => $this->user->lang('TOTAL_ITEMS', (int) $total_count),
'PAGE_NUMBER' => $this->pagination->on_page($total_count, $per_page, $start),
Код: Выделить всё
'PHONE' => 'Телефон',
Код: Выделить всё
'TOTAL_ITEMS' => 'Всего: <strong>%d</strong>',
Теперь добавим сортировку по обоим колонкам таблицы, то есть по имени и по номеру телефона.
Открываем mytest_body.html и меняем
Код: Выделить всё
<th class="name">{L_NAME}</th>
<th class="name">{L_PHONE}</th>
Код: Выделить всё
<th class="name"><a href="{U_SORT_NAME}">{L_NAME}</a></th>
<th class="name"><a href="{U_SORT_PHONE}">{L_PHONE}</a></th>
Код: Выделить всё
<!-- INCLUDE overall_footer.html -->
Код: Выделить всё
<form method="post" action="{S_MODE_ACTION}">
<fieldset class="display-options">
<label>{L_SORT_BY} <select name="sk" id="sk">{S_SELECT_SORT_KEY}</select></label>
<label><select name="sd" id="sd">{S_SELECT_SORT_DIR}</select></label>
<input name="sort" value="{L_GO}" class="button2" type="submit">
</fieldset>
</form>
<br clear="all" />
Код: Выделить всё
'TOTAL_ITEMS' => 'Всего: <strong>%d</strong>',
Код: Выделить всё
'SORT_BY_NAME' => 'по имени',
'SORT_BY_PHONE' => 'по номеру телефона',
Код: Выделить всё
$start = $this->request->variable('start', 0);
Код: Выделить всё
$sort_key = $this->request->variable('sk', 'a');
$sort_dir = $this->request->variable('sd', 'd');
$submit = (isset($_POST['submit'])) ? true : false;
$default_key = 'a';
$sort_dir_text = array('a' => $this->user->lang['ASCENDING'], 'd' => $this->user->lang['DESCENDING']);
$sort_key_text = array('a' => $this->user->lang['SORT_BY_NAME'], 'b' => $this->user->lang['SORT_BY_PHONE']);
$sort_key_sql = array('a' => 'name', 'b' => 'phone');
$s_sort_key = '';
foreach ($sort_key_text as $key => $value)
{
$selected = ($sort_key == $key) ? ' selected="selected"' : '';
$s_sort_key .= '<option value="' . $key . '"' . $selected . '>' . $value . '</option>';
}
$s_sort_dir = '';
foreach ($sort_dir_text as $key => $value)
{
$selected = ($sort_dir == $key) ? ' selected="selected"' : '';
$s_sort_dir .= '<option value="' . $key . '"' . $selected . '>' . $value . '</option>';
}
$sql_sort = 'ORDER BY ' . $sort_key_sql[$sort_key] . (($sort_dir == 'a') ? ' ASC' : ' DESC');
Код: Выделить всё
$pagination_url = append_sid("{$this->phpbb_root_path}mytest");
Код: Выделить всё
// Build a relevant pagination_url
$params = array();
$check_params = array(
'sk' => array('sk', $default_key),
'sd' => array('sd', 'a'),
);
foreach ($check_params as $key => $call)
{
if (!isset($_REQUEST[$key]))
{
continue;
}
$param = call_user_func_array('request_var', $call);
$param = urlencode($key) . '=' . ((is_string($param)) ? urlencode($param) : $param);
$params[] = $param;
if ($key != 'sk' && $key != 'sd')
{
$sort_params[] = $param;
}
}
$pagination_url = append_sid("{$this->phpbb_root_path}mytest", implode('&', $params));
$sort_url = append_sid("{$this->phpbb_root_path}mytest");
Код: Выделить всё
$sql = 'SELECT *
FROM ' . MY_TEST_TABLE;
Код: Выделить всё
$sql = 'SELECT *
FROM ' . MY_TEST_TABLE . '
'. $sql_sort;
Код: Выделить всё
'TEST_PAGE_TITLE' => $this->user->lang('TEST_PAGE_TITLE'),
Код: Выделить всё
'S_SELECT_SORT_DIR' => $s_sort_dir,
'S_SELECT_SORT_KEY' => $s_sort_key,
'U_SORT_NAME' => $sort_url. '?sk=a&sd=' . (($sort_key == 'a' && $sort_dir == 'a') ? 'd' : 'a'),
'U_SORT_PHONE' => $sort_url. '?sk=b&sd=' . (($sort_key == 'b' && $sort_dir == 'a') ? 'd' : 'a'),
'S_MODE_ACTION' => $pagination_url,
Далее можно добавить модуль настройки расширения в Администраторском разделе, возможность добавления, удаления и редактирования данных и соответствующие права доступа, а также новое поле в таблицу базы данных в новой версии расширения. Но этим мы займемся позже, а пока вот наш результат:
Добавление модуля в ACP, права доступа, изменение структуры таблиц БД
Теперь давайте добавим модуль в Администраторский раздел-->Управление расширениями, где можно было бы изменять какие-то настройки нашего расширения. Например, сделаем возможность изменять количество строк в таблице в списке имен. В текущей версии это число является неизменным и равно 5. Также добавим в нашу таблицу phpbb_my_test новое поле, например какие-то комментарии, пусть это поле будет называться comments. Сделаем это в новой версии расширения.
Сначала отключим расширение в Администраторском разделе. Затем изменим информацию о расширении, для чего откроем composer.json и заменим
Код: Выделить всё
"version": "0.0.1",
"time": "2014-02-06",
Код: Выделить всё
"version": "0.0.2",
"time": "2014-02-11",
Код: Выделить всё
<?php
/**
*
* @package phpBB Extension - My test
* @copyright (c) 2013 phpBB Group
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
namespace Sheer\mytest\migrations;
class version_0_0_2 extends \phpbb\db\migration\migration
{
public function effectively_installed()
{
return isset($this->config['mytest_version']) && version_compare($this->config['mytest_version'], '0.0.2', '>=');
}
static public function depends_on()
{
return array('\Sheer\mytest\migrations\version_0_0_1');
}
public function update_schema()
{
return array(
'add_columns' => array(
$this->table_prefix . 'my_test' => array(
'comments' => array('VCHAR:255', ''),
),
),
);
}
public function update_data()
{
return array(
array('config.update', array('mytest_version', '0.0.2')),
);
}
}
Допустим число строк на странице будет храниться у нас в таблице
phpbb_config
в новой строке и в поле config_name запишем значение mytest_perpageДля этого в файл version_0_0_2.php после строки
Код: Выделить всё
array('config.update', array('mytest_version', '0.0.2')),
Код: Выделить всё
array('config.add', array('mytest_perpage', '10')),
// Add new module
array('module.add', array(
'acp',
'ACP_CAT_DOT_MODS',
'ACP_MY_TEST'
)),
array('module.add', array(
'acp',
'ACP_MY_TEST',
array(
'module_basename' => '\Sheer\mytest\acp\main_module',
'modes' => array('settings'),
),
)),
ext/Sheer/mytest/acp
ext/Sheer/mytest/adm/style
В папке ext/Sheer/mytest/adm/style создадим html-шаблон acp_mytest_body.html
Код: Выделить всё
<!-- INCLUDE overall_header.html -->
<h1>{L_ACP_MY_TEST}</h1>
<p>{L_ACP_MY_TEST_EXPLAIN}</p>
<form id="acp_mytest" method="post" action="{U_ACTION}">
<fieldset>
<dl>
<dt><label for="per_page">{L_ACP_MY_TEST_PER_PAGE}</label></dt>
<dd><input name="per_page" type="text" value="{PER_PAGE}"></dd>
</dl>
<p class="submit-buttons">
<input class="button1" type="submit" id="submit" name="submit" value="{L_SUBMIT}" />
<input class="button2" type="reset" id="reset" name="reset" value="{L_RESET}" />
</p>
{S_FORM_TOKEN}
</fieldset>
</form>
<!-- INCLUDE overall_footer.html -->
ACP_MY_TEST
, ACP_MY_TEST_EXPLAIN
и ACP_MY_TEST_PER_PAGE
.
Код: Выделить всё
<?php
/**
*
* mytest [Russian]
*
* @package My test
* @copyright (c) 2013 phpBB Group
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
/**
* @ignore
*/
if (!defined('IN_PHPBB'))
{
exit;
}
if (empty($lang) || !is_array($lang))
{
$lang = array();
}
$lang = array_merge($lang, array(
'ACP_MY_TEST' => 'Мой тест',
'ACP_MY_TEST_EXPLAIN' => 'Здесь можно настроить параметры расширения.',
'ACP_MY_TEST_PER_PAGE' => 'Количество строк на странице',
));
Код: Выделить всё
<?php
/**
*
* @package phpBB Extension - My test
* @copyright (c) 2013 phpBB Group
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
namespace Sheer\mytest\acp;
class main_info
{
function module()
{
return array(
'filename' => '\Sheer\mytest\acp\main_module',
'title' => 'ACP_MY_TEST',
'version' => '1.0.0',
'modes' => array(
'settings' => array('title' => 'ACP_MY_TEST', 'auth' => 'ext_Sheer/mytest && acl_a_board', 'cat' => array('ACP_MY_TEST')),
),
);
}
}
'auth' => 'ext_Sheer/mytest && acl_a_board'
. Это нужно для того, чтобы при отключении расширения модуль управления расширением также отключался).и main_module.php
Код: Выделить всё
<?php
/**
*
* @package phpBB Extension - My test
* @copyright (c) 2013 phpBB Group
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
namespace Sheer\mytest\acp;
class main_module
{
var $u_action;
function main($id, $mode)
{
global $db, $user, $auth, $template, $cache, $request;
global $config, $phpbb_root_path, $phpbb_admin_path, $phpEx;
$this->tpl_name = 'acp_mytest_body';
$this->page_title = $user->lang('ACP_MY_TEST');
add_form_key('Sheer/mytest');
if ($request->is_set_post('submit'))
{
if (!check_form_key('Sheer/mytest'))
{
trigger_error('FORM_INVALID');
}
$config->set('mytest_perpage', $request->variable('per_page', 10));
trigger_error($user->lang['CONFIG_UPDATED'] . adm_back_link($this->u_action));
}
$template->assign_vars(array(
'U_ACTION' => $this->u_action,
'PER_PAGE' => (isset($config['mytest_perpage'])) ? $config['mytest_perpage'] : 10,
));
}
}
Тоже самое относится и к "языковому" файлу info_acp_mytest.php. Он должен иметь префикс info_, чтобы языковые объекты, определенные там, были доступны в Администраторском разделе.
Добавим глобальное право доступа - Разрешить просмотр нашей страницы.
В файле version_0_0_2.php после
Код: Выделить всё
array('config.add', array('mytest_perpage', '10')),
Код: Выделить всё
// Add permissions
array('permission.add', array('u_viewtestpage', true)),
// Add permissions sets
array('permission.permission_set', array('ROLE_USER_FULL', 'u_viewtestpage', 'role', true)),
array('permission.permission_set', array('ROLE_USER_STANDARD', 'u_viewtestpage', 'role', true)),
array('permission.permission_set', array('REGISTERED', 'u_viewtestpage', 'group', true)),
В папке ext/Sheer/mytest/language/ru создадим файл permissions_mytest.php (UTF-8 без BOM !!!)
Код: Выделить всё
<?php
/**
*
* @package phpBB Extension - My test
* @copyright (c) 2013 phpBB Limited <https://www.phpbb.com>
* @license GNU General Public License, version 2 (GPL-2.0)
*
*/
/**
* DO NOT CHANGE
*/
if (!defined('IN_PHPBB'))
{
exit;
}
if (empty($lang) || !is_array($lang))
{
$lang = array();
}
$lang = array_merge($lang, array(
'ACL_U_VIEWTESTPAGE' => 'Может просматривать тестовую страницу',
));
ACL_U_VIEWTESTPAGE
был доступен в Администраторском разделе в управлении правами доступа. в файл mytest_lng.php добавим
Код: Выделить всё
'LOGIN_EXPLAIN_VIEW_MYTEST_PAGE' => 'Вы должны быть авторизованы для просмотра этой страницы.',
Теперь, чтобы наши настройки отображения и право доступа заработали, необходимо внести изменения в контроллер: открываем mytest.php и удаляем строку
Код: Выделить всё
$per_page = 5;
$per_page
на $this->config['mytest_perpage']
Добавляем вывод комментариев: после
Код: Выделить всё
'PHONE' => $row['phone'],
Код: Выделить всё
'COMMENT' => $row['comments'],
Код: Выделить всё
<th class="name"><a href="{U_SORT_PHONE}">{L_PHONE}</a></th>
Код: Выделить всё
<th class="name">{L_COMMENT}</th>
Код: Выделить всё
<td>{row.PHONE}</td>
Код: Выделить всё
<td>{row.COMMENT}</td>
Код: Выделить всё
'COMMENT' => 'Комментарий',
Код: Выделить всё
$start = $this->request->variable('start', 0);
Код: Выделить всё
if (!$this->auth->acl_gets('u_viewtestpage'))
{
if ($this->user->data['user_id'] != ANONYMOUS)
{
trigger_error('NOT_AUTHORISED');
}
login_box('', $this->user->lang['LOGIN_EXPLAIN_VIEW_MYTEST_PAGE']);
}
To be continued...
Приношу благодарность членам команды rxu и Татьяна5 за замечания, комментарии и дополнения.