Подскажите пожалуйста, есть ли такой механизм в builder, octobercm, который позволял бы создавать новую запись из выбранной записью, с полностью скопированный и данными? При сохранении появляется новая запись.

  • reazzon ответили на это сообщение.
  • Нашел на буржуйском сайте как это сделать:
    Делаем кнопку для нужного нам контроллера, нужен файлик _list_toolbar.htm
    В нем создаем новую кнопку:

    <button
            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>
            Копировать выбранные записи
        </button>

    Дальше в контроллере создать метод (заменяйте только код по работе с моделью на свой

        public function onDuplicate() {
               $checked_items_ids = input('checked');
               foreach ($checked_items_ids as $id) {
                  $original = Model::where("id", $id)->first(); // Вот тут надо свою модель подставить
                  $clone = $original->replicate();
                  $clone->save();
               }
               \Flash::success('Записи скопированы');
               return $this->listRefresh();
        } 

    MaxOn в builder такого нет. Но кодом с моделью данных такое можно сделать.

    Понял. Благодарю. Может у кого-то есть пример такого решения? Совсем не понимаю с чего начать 🙁

    • iMateo ответили на это сообщение.

      MaxOn
      Я не подскажу сейчас именно по админке, но с точки зрения Eloquent это делается очень просто:
      $currentItem = ItemModel::whereId($id) // любым удобным способом находим нужную нам Модель;
      $newItem = currentItem->replicate() // делаем клон;
      $newItem->save(); // записываем в БД

      В админке теперь надо найти обработчики в List и добавить свой.

      Нашел на буржуйском сайте как это сделать:
      Делаем кнопку для нужного нам контроллера, нужен файлик _list_toolbar.htm
      В нем создаем новую кнопку:

      <button
              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>
              Копировать выбранные записи
          </button>

      Дальше в контроллере создать метод (заменяйте только код по работе с моделью на свой

          public function onDuplicate() {
                 $checked_items_ids = input('checked');
                 foreach ($checked_items_ids as $id) {
                    $original = Model::where("id", $id)->first(); // Вот тут надо свою модель подставить
                    $clone = $original->replicate();
                    $clone->save();
                 }
                 \Flash::success('Записи скопированы');
                 return $this->listRefresh();
          } 

      Очень признателен. Спасибо!

      • Изменено

      Еще раз благодарю.
      Подскажите пожалуйста, что нужно прописать, чтобы сохранялись еще и выбранные relation? Сейчас происходит дублирование самой записи Model, но без данных таблицы relation ($belongsToMany)

      • Изменено

      Нашел решение, может вдруг, кому пригодится:

      public function onDuplicate() {
              $checked_items_ids = input('checked');
              foreach ($checked_items_ids as $id) {
                  $original = Model::where("id", $id)->first(); //ссылка на модель
                  $clone = $original->replicate();
                  $clone->push();          
                  $original->load('lectors');                     
      
                  foreach ($original->getRelations() as $relationName => $values){
                      $clone->{$relationName}()->sync($values);
                  }
      
              }
              \Flash::success('Записи скопированы');
              return $this->listRefresh();
          }

      Где load('lectors'); пишем свои значения: load('relation1','relation2');

      НО, как сделать, чтобы и картинки, файлы дублировались не понятно 🙁 Подскажите пожалуйста, если не сложно