Дублювання записів у OctoberCMS

При створенні контенту в OctoberCMS часто виникає необхідність скопіювати (клонувати) якусь Модель.

Або простіше говорячи мовою Ваших клієнтів: а як мені скопіювати існуючий запис? Зважаючи на частоту запиту на цей функціонал, я хочу подати ідею генерувати цей блок коду за замовчуванням у Rainlab.Builder 😎


Крок1. Для початку знайдіть необхідний контролер вашого плагіна, наприклад plugins/icstudio/control/controllers/Tariffs.php

Крок 2. Тепер додамо до нього новий метод, який створюватиме копії необхідних моделей. В Інтернеті можна зустріти аналогічний код, але ми його допрацювали, тому копіпастом його використовувати не рекомендується.

  • до імені запису додасться цифра 2;

  • у slug додасться цифра 2;

  • ключ is_active буде виведений у 0. Це убезпечить ваш продакшн від виведення невірних даних.


              public function onDuplicate()
    {
              $checked_items_ids = input('checked');
              foreach ($checked_items_ids as $id) {
                     $original = TariffModel::where("id", $id)->first();
                     $clone = $original->replicate();
                     $clone->name = $clone->name . '2';
                     $clone->slug = $clone->slug . '2';
                     $clone->service_name = $clone->service_name . '2';
                     $clone->is_active = 0;
                     $clone->save();
                }
                Flash::success('Записи скопированы');
                return $this->listRefresh();
      }


Крок 3. Тепер треба прив'язати цей екшн до верстки бекенда. Для цього знайдіть файл _list_toolbar.htm для вашого контролера, наприклад для контролера з прикладу шлях до цього файлу буде такий: plugins/icstudio/control/controllers/tariffs/_list_toolbar.htm


Додамо цей код, щоб вивести кнопку:

class="btn btn-default oc-icon-clone"
        disabled="disabled"
        onclick="$(this).data('request-data', {
        checked: $('.control-list').listWidget('getChecked')
        })"
        data-request="onDuplicate"
        data-request-confirm="Хочете скопіювати вказані записи?"
        data-trigger-action="enable"
        data-trigger=".control-list input[type=checkbox]"
        data-trigger-condition="checked"
        data-request-success="$(this).prop('disabled', true)"
        data-stripe-load-indicator>
        Копіювати вибрані записи

    

Код кнопки має бути всередині


...


Крок 4. Зберігаємо, чистимо кеш і милуємось 



Ніколи не піздно розвити свій бізнес

Приступити

Цей сайт використовує файли cookie. Ми не персоналізуємо Вас, а лише робимо серфінг на сайті зручнішим. Ви можете ознайомитись з нашою Політикою приватності.