Сниппеты. Решение часто возникающих задач DVelum 2.0
Простые и быстрые решения. DVelum 2.0.0
- Сформировать путь к странице на основе правил формирования URL
- Сформировать путь к странице публичной части, использующей определенную функциональность (модуль)
- Определить, авторизирован ли пользователь
- Авторизовать пользователя по логину и паролю
- Извлечь колонку из многомерного массива (актуально для результатов выборок из базы данных)
- Переиндексировать многомерный массив (актуально для результатов выборок из базы данных)
- Перегруппировать данные многомерного массива (актуально для результатов выборок из базы данных)
- Получить объект конфигурации. Подключить конфигурационный файл php (содержащий массив)
- Получить объект, содержащий основную конфигурацию. Получить Main Config
- Узнать количество объектов определенного типа (количество строк в таблице БД)
- Выборка данных объекта при помощи модели
- Получить ссылку на инстанцированый адаптер подключения к базе данных
- Получить ссылку на инстанцированый адаптер кэша
- Вставить html в центральную часть страницы вне шаблона (публичная часть)
- Изменение html-заголовка страницы и мета-содержания
- Шаблон. Вывести блоки, назначенные на определенную позицию (плейсхолдер)
- Вывести в таблицу заголовок вместо ссылки на объект
Сформировать путь к странице на основе правил формирования URL
\Dvelum\Request::factory()->url(['controller' , 'action' , 'subaction']);
Стандартная конфигурация использует «/» как разделитель и «.html» как расширение. Будет сформирован путь: /controller/action/subaction.html
Сформировать путь к странице публичной части, использующей определенную функциональность (модуль)
Допустим, к странице с кодом newspage прикреплена функциональность news, необходимо сформировать ссылку на вторую новостную страницу:
$frontendRouter = new \Dvelum\App\Router\Module();
$url = \Dvelum\Request::factory()->url([$frontendRouter->findUrl('news') , 2 ]);
Будет сформирован путь: /news/2.html
Определить, авторизован ли пользователь
$user = \Dvelum\App\Session\User::factory();
$authorized = $user->isAuthorized();
Авторизовать пользователя по логину и паролю
$user = \Dvelum\App\Session\User::factory->login($login , $password);
Если пара login-password верная, то $user будет содержать ссылку на объект User, иначе false.
Извлечь колонку из многомерного массива (актуально для результатов выборок из базы данных)
$data = array(
array('id' => 10 , 'name' => 'Name1' , 'group' => 'admin'),
array('id' => 22 , 'name' => 'Name2' , 'group' => 'admin'),
array('id' => 34 , 'name' => 'Name3' , 'group' => 'dev'),
array('id' => 45 , 'name' => 'Name4' , 'group' => 'admin'),
array('id' => 52 , 'name' => 'Name5' , 'group' => 'dev'),
array('id' => 61 , 'name' => 'Name6' , 'group' => 'user'),
);
$ids = \Dvelum\Utils::fetchCol('id' , $data);
print_r($ids);
//Будет получено:
Array
(
[0] => 10
[1] => 22
[2] => 34
[3] => 45
[4] => 52
[5] => 61
)
Переиндексировать многомерный массив (актуально для результатов выборок из базы данных)
$data = array(
array('id'=>10,'name'=>'Name1','group'=>'admin'),
array('id'=>22,'name'=>'Name2','group'=>'admin'),
array('id'=>34,'name'=>'Name3','group'=>'dev'),
array('id'=>45,'name'=>'Name4','group'=>'admin'),
array('id'=>52,'name'=>'Name5','group'=>'dev'),
array('id'=>61,'name'=>'Name6','group'=>'user'),
);
$ids = \Dvelum\Utils::rekey('id' , $data);
print_r($ids);
Array
(
[10] => Array([id] => 10 [name] => Name1 [group] => admin)
[22] => Array([id] => 22 [name] => Name2 [group] => admin)
[34] => Array([id] => 34 [name] => Name3 [group] => dev)
[45] => Array([id] => 45[name] => Name4[group] => admin)
[52] => Array([id] => 52[name] => Name5[group] => dev)
[61] => Array([id] => 61[name] => Name6[group] => user)
)
Перегруппировать данные многомерного массива (актуально для результатов выборок из базы данных)
$data = array(
array('id'=>10,'name'=>'Name1','group'=>'admin'),
array('id'=>22,'name'=>'Name2','group'=>'admin'),
array('id'=>34,'name'=>'Name3','group'=>'dev'),
array('id'=>45,'name'=>'Name4','group'=>'admin'),
array('id'=>52,'name'=>'Name5','group'=>'dev'),
array('id'=>61,'name'=>'Name6','group'=>'user'),
);
$ids = \Dvelum\Utils::groupByKey('group' , $data);
print_r($ids);
Array
(
[admin] => Array (
[0] => Array([id] => 10 [name] => Name1 [group] => admin)
[1] => Array([id] => 22 [name] => Name2 [group] => admin)
[2] => Array([id] => 45 [name] => Name4 [group] => admin)
)
[dev] => Array (
[0] => Array([id] => 34 [name] => Name3 [group] => dev)
[1] => Array([id] => 52 [name] => Name5 [group] => dev)
)
[user] => Array (
[0] => Array([id] => 61 [name] => Name6 [group] => user)
)
)
Получить объект конфигурации. Подключить конфигурационный файл php (содержащий массив)
Получим объект конфигурации новостей, расположенный по адресу: ./system/app/config/news.php
/**
* @var \Dvelum\Config\ConfigInterface $someCfg
*/
$someCfg = Config::storage()->get('news.php');
Получить объект, содержащий основную конфигурацию. Получить Main Config
/**
* @var \Dvelum\Config\ConfigInterface $cfg
*/
$cfg = Config::storage()->get('main.php');
Узнать количество объектов определенного типа (количество строк в таблице БД)
Получим количество активных учетных записей пользователей (объект User):
$count = Model::factory('user')->query()->filters(['enabled'=>1);
Выборка данных объекта при помощи модели
Пример: Выбрать 10 последних новостей
/*
* Параметры выборки. Получить 10 строк, отсортированных по news_date в порядке убывания
*/
$params = array(
'sort'=>'news_date',
'dir'=>'DESC',
'start'=>0,
'limit'=>10
);
/*
* Фильтры. Только опубликованные записи
*/
$filters = array('published'=>true);
/*
* Список полей, которые необходимо выбрать
*/
$fields = array('id','title','news_date');
/*
* Инициализируем модель
*/
$model = Model::factory('News');
$data = $model->query()->params($params)->($filters)->fields($fields)->fetchAll();
Получить ссылку на инстанцированый адаптер подключения к базе данных
// Адаптер подключения к базе данных, используемый моделью User
/**
* @var \Dvelum\Db\Adapter
*/
$db = Model::factory('user')->getDbConnection();
Получить ссылку на инстанцированый адаптер кэша
// Получить адаптер кэширования данных
$cache = Model::factory('user')->getCacheAdapter();
/**
* @var \Cache_Interface | false $cache
*/
Вставить html в центральную часть страницы вне шаблона (публичная часть)
$page = \Page::getInstance();
$page->text.='Some text';
Изменение html-заголовка страницы и мета-содержания
namespace App\Frontend\News;
class Controller extends \Dvelum\App\Frontend\Controller
{
public function someAction()
{
$this->page = \Page::getInstance();
// дополнение текста
$this->page->text.=’Some text’;
// изменение html-заголовка страницы (тот, что отображается в заголовке окна браузера или его вкладки)
$this->page->html_title = 'Page HTML Title';
// изменение заголовка страницы (обычно выводится внутри шаблона в теге)
$this->page->page_title = 'Page Title';
// изменение содержания тега
$this->page->meta_keywords = 'page meta key words';
// изменение содержания тега
$this->page->meta_description = 'page meta description';
}
}
Шаблон. Вывести блоки, назначенные на определенную позицию
Блоки выводятся в шаблонах, для этого нам необходима ссылка на менеджер блоков, она автоматически передается в шаблон layout.php. Если менеджер блоков вам нужен на вложенном уровне шаблонов, то перед рендерингом передайте ссылку на менеджер блоков. Конфигурация макета (laout_cfg.php) содержит набор плейсхолдеров, к которым привязываются блоки в административном интерфейсе. Каждый плейсхолдер имеет свой код, зная этот код можно вывести блоки в шаблон:
$blockManager = $this->get('blockManager');
echo $blockManager->getBlocksHtml('placecode');
Вывести в таблицу заголовок вместо ссылки на объект
Самое простое решение - доопределить listField контроллера, ели он унаследован от \Dvelum\App\Backend\Api\Controller:
protected $listFields = ['link_field'];
или если нужно положить заголовок в отдельное поле результата
protected $listFields = ['new_result_field'=>'link_field'];