При створенні контенту в 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. Зберігаємо, чистимо кеш і милуємось