Создание сайта на Drupal 8

Опубликовано 2015.04.04 в разделе Drupal.

В этой серии статей мы разберем основы Drupal 8, начиная от установки и заканчивая небольшим практическим заданием. На данный момент(апрель 2015) восьмёрка ещё сыровата и модулей для неё мало, но знакомиться с ней уже давно пора. Если вы ещё не работали с Drupal - лучше начинайте с 8, пока научитесь и поймёте что там к чему - система будет гораздо стабильнее.

Просмотр SQL запроса в Laravel

Опубликовано 2016.10.12 в разделе Php.

Перед запросом нужно включить логирование и уже после него смотреть лог. Всё прекрасно работает.
  1. DB::enableQueryLog();
  2. $views = DB::table('real_views')
  3. ->leftJoin('node_info', 'node_info.nid', '=', 'real_views.nid')
  4. ->select('node_info.nid as node_nid','real_views.nid as real_nid')
  5. ->where('real_views.id', '>', $start_id)
  6. ->orderBy('real_views.id', 'asc')
  7. ->take(10)
  8. ->get();
  9. print_r(DB::getQueryLog());

Отправка POST запроса и получение ответа в Laravel

Опубликовано 2016.10.06 в разделе Php.

В начале контроллера пишем:
  1. use GuzzleHttp\Client;
И далее в нужном вам методе:
  1. $options = [
  2. 'name' => 'my name',
  3. 'client_id' => 'my client_id',
  4. 'client_secret' => 'my client_secret',
  5. ];
  6.  
  7. $client = new Client();
  8. $res = $client->request('POST', 'https://oauth.server.local/token', ['form_params' => $options]);
  9. echo $res->getBody();
Что интересно - ни водном мануале я не смог нагуглить, что переменные надо складывать в переменную массива с ключем form_params!

Получить конфиг в Laravel

Опубликовано 2016.10.06 в разделе Php.

Чтобы получить конфиг скажем из файла services.php - достаточно использовать следующий код:
  1. //пример конфига в services.php
  2. 'yandex' => [
  3. 'client_id' => '95869100dkfdo48gjc32269826ef926a',
  4. 'client_secret' => '191b012b2299e7jfye4hv789gd03ee6c9',
  5. 'redirect' => 'http://localhost/test-oauth',
  6. ],
  7.  
  8. //выведет 191b012b2299e7jfye4hv789gd03ee6c9
  9. config('services.yandex.client_secret');

Создание урла с middleware в Laravel

Опубликовано 2016.10.05 в разделе Php.

Создаёте контроллер, например CronController (в консоли php artisan make:controller CronController):
  1. namespace App\Http\Controllers;
  2.  
  3. use Illuminate\Http\Request;
  4.  
  5. use App\Http\Requests;
  6. use Illuminate\Support\Facades\DB;
  7.  
  8. class CronController extends Controller
  9. {
  10.  
  11. public function myCallback() {
  12. echo __FUNCTION__;
  13. }
  14. }
Затем создаёте middleware, например с именем LocalhostOnly (в консоли php artisan make:middleware LocalhostOnly)
  1. namespace App\Http\Middleware;
  2.  
  3. use Closure;
  4.  
  5. class LocalhostOnly
  6. {
  7. /**

Подружить Admin menu и Toolbar

Опубликовано 2016.09.18 в разделе Drupal.

Чтобы подружить эти 2 модуля - включайте:
  • Administration menu
  • Administration menu Toolbar style
  • Toolbar
Создавайте свой модуль и в нём пропишите следующий хук:
  1. function mymodule_theme_registry_alter(&$theme_registry) {
  2. $theme_registry['toolbar']['path'] = $theme_registry['toolbar']['theme path'] = drupal_get_path('module', 'mymodule');
  3. }
Затем в папку модуля положите файл с именем toolbar.tpl.php и содержимым:
  1. <div id="toolbar" class="<?php print $classes; ?> clearfix"></div>

Colorbox node + Webform + Redirect

Опубликовано 2016.09.18 в разделе Drupal.

Если поставить модули colorbox, colorbox_node и webform - то можно чудесным образом выводить форму в модульном окне. Для этого создавайте вебформу, ставьте чекбокс "Доступен как блок" Затем в нужном месте прописывайте ссылку
  1. <a class="link colorbox-node" href="/node/304?width=420&height=150" >Закажи звонок!</a>
Такая ссылка откроет вебформу(nid=304) в колорбоксе размерами 420х150 пикселей. Однако, если этой форме добавить редирект после сабмита - то он не сработает. Для этого добавьте get параметр destination

Panels + Statistics + Drupal 8

Опубликовано 2016.09.14 в разделе Drupal.

Модуль статистики(тот что в ядре) ""цепляется за ноды в hook_ENTITY_TYPE_view. Если вы выводите ноды через панели(Pages) - то этот хук соответственно не будет работать. Разрулить проблему можно если самому подрубить библиотеку модуля statistics к страницам материалов. Я сделаю это в hook_page_attachments. Код хука
  1. /**
  2.  * Implements hook_page_attachments().
  3.  */
  4. function module_page_attachments(array &$page) {
  5. $request = \Drupal::request()->getRequestUri();
  6. $nid = NULL;
  7. if (substr($request, 0, 6) == '/node/') {
  8. $nid = substr($request, 6);
  9. } else {

DataBase API в Drupal 8

Опубликовано 2016.09.14 в разделе Drupal.

API в восьмёрке очень похоже на API.
  1. //не забываем
  2. use Drupal\Core\Database\Database;
  3. use Drupal\Core\Database\Query\Select;
  4.  
  5. //далее просто пример моего запроса
  6. $connection = Database::getConnection();
  7. $sql = new Select('node__field_tags', 'ft', $connection);
  8. $sql->condition('field_tags_target_id', $tids, 'in');
  9. $sql->leftJoin('taxonomy_term_field_data', 'tfd', 'tfd.tid=ft.field_tags_target_id');
  10. $sql->leftJoin('node_field_data','nfd', 'nfd.nid=ft.entity_id');
  11. $sql->fields('ft', array('field_tags_target_id', 'entity_id'));
  12. $sql->fields('tfd', array('name'));