/** * @param int $id - PageLayout ID */ public function actionCloneTemplate($id) { $model = $this->findModel($id); $newModel = new ContentTemplate(); // Clone attributes foreach ($model->attributes as $name => $value) { if (in_array($name, ['id', 'can_be_deleted'])) { continue; } if ($name == 'name') { $value .= ' (Copy)'; } $newModel->{$name} = $value; } $newModel->save(false); // Clone widget positions foreach ($model->contentTemplateHasWidgets as $prototypeLayoutWidget) { $layoutWidget = new ContentTemplateHasWidget(); $layoutWidget->content_template_id = $newModel->id; $layoutWidget->content_template_widget_id = $prototypeLayoutWidget->content_template_widget_id; $layoutWidget->position = $prototypeLayoutWidget->position; $layoutWidget->sorter = $prototypeLayoutWidget->sorter; $layoutWidget->save(false); } }