Интеграция сторонней вёрстки в drupal 8

Drupal version: 

Задача: Есть сложный ленд пейдж, сверстанный в html и огромным кол-вом статичного контента.. Необходимо его интегрировать в drupal. 

Существуют два варианта

1. Переверстать всё с нуля, что займет тьму времени на вёрстку и отладку.

2. Создать шаблон twig и разместить в нём код ленда с подключением всех стилей и скриптов. Это доволно просто, главное организовать праавильную структура каталогов в каталоге темы. 

И вот, когда ленд уже работает через наш twig шаблон начнем вносить динамичный контент. А какой там может быть контент? Статьи и формы.

Со статьями всё просто. Выводим конент через views+rest (json).  Но сначала необходимо json контен передать в переменные для работы в twig.  Делается это в файле темы mytheme.theme

 

function mytheme_preprocess(&$variables, $hook) {
    $host = \Drupal::request()->getSchemeAndHttpHost();
    $string = file_get_contents("$host/news/json");
    $json = json_decode($string, true);
    //print_r($json);
    $variables['news'] = $json;
}

В шаблоне twig вывод примерно такой.

 

    {% for item in news %}
    <div class="news-article" id="news{{ item.nid }}">
        <div class="news-article__data">{{ item.created }}</div>
        <div class="news-article__title">{{ item.title }}</div>
        <div class="news-article__picture">
            <img src="{{ item.field_image }}" alt="" />
        </div>
        <div class="news-article__description">
            {{ item.body|raw }}
        </div>
    </div>
    {% endfor %}

или например только 5ю статью списка {{news.4.nid }}

А как  же формы? Тут тоже два варианта. Либо переверстать, например через webform либо схитрить. 

Переверстать это очень непростая задача, и может растянуться на очень длительный период, чтобы добить максимально похожего результата.  Придется немало шаблонов переделать и переписать кучу js

А можно написать обработчик, для обработки форм через ajax (я имею ввиду сбор данных форм)

Для этого создаем модуль и страничку для сбора данных через post. те создаем controler в каталоге модуля: /src/Controller/MyController.php и обрабатываем данные которые прилетели через ajax. Ниже пример по сбору емайл

//в js ленда добавляем при самбите формы $.post( "/mailtodb", {email: $(SEL.subscriptionFormInput).val() } );

//В контролере
class MailtodbController extends ControllerBase {
    public function content() {
        $mail = $_POST['email'];
        if (filter_var($mail, FILTER_VALIDATE_EMAIL)) {
            $query = \Drupal::database()->insert('mailtodb');
            $query->fields([
                'email' =>$mail,
            ]);
            $query->execute();
        }
        $build = [
            '#markup' =>'',
        ];
        return $build;
    }
}

Вот таким нехитрым способом был интегрирован лендинг с формой сбора емайл и новостями на чистый drupal 8 за три часа

 

Tags

module (3) mysql (2) drush (2) pass (1) bootstrap (1) update (1) modal (1) theme (1) css (1) proxy (1) custom (1) sftp (1) php (1) twig (1) mail (1) backups (1) telegram (1) new year (1) Вёрстка (1) ssh (1) Интеграция вёрстки (1)