摘要:序言實現增刪改查操作成功后仍留在當前頁,能給用戶一個良好的體驗。殊途同歸,如有更好的實現方法,歡迎交流。需求分析實現增刪改查后操作成功后仍然留在當前頁面。分析總結此方法的好處是不動核心代碼,調用方式保留了自帶的方式。
序言
實現增刪改查操作成功后仍留在當前頁,能給用戶一個良好的體驗。但是 Yii2 框架本身是沒有在增刪改查操作成功后仍留在當前頁的效果的,要實現這樣的一個效果得自己寫。我的原則是不動核心代碼,始終堅持自己的原則,現實現了我把它分享出來。殊途同歸,如有更好的實現方法,歡迎交流。
需求分析1、實現增刪改查后操作成功后仍然留在當前頁面。
效果圖1、鏈接的效果圖
共有兩個文件ActionColumn.php和Helper.php
1、ActionColumn.php文件
defaultButtons = [ [ "url" => "view", "icon" => "eye", "class" => "btn btn-success btn-xs", "label" => Yii::t("yii", "View"), "appendReturnUrl" => false, "url_append" => "", "keyParam" => "id",//是否傳id,不傳設置null ], [ "url" => "update", "icon" => "pencil", "class" => "btn btn-primary btn-xs", "label" => Yii::t("yii", "Update"), ], [ "url" => "delete", "icon" => "trash-o", "class" => "btn btn-danger btn-xs", "label" => Yii::t("yii", "Delete"), "options" => [ "data-action" => "delete", ], ] ]; if (null === $this->buttons) { $this->buttons = $this->defaultButtons; } elseif ($this->buttons instanceof Closure) { $this->callbackButtons = $this->buttons; } } public function createUrl( $action, $model, $key, $index, $appendReturnUrl = null, $url_append = null, $keyParam = "id", $attrs = [] ) { if ($this->urlCreator instanceof Closure) { return call_user_func($this->urlCreator, $action, $model, $key, $index); } else { $params = []; if (is_array($key)) { $params = $key; } else { if (is_null($keyParam) === false) { $params = [$keyParam => (string)$key]; } } $params[0] = $this->controller ? $this->controller . "/" . $action : $action; foreach ($attrs as $attrName) { if ($attrName === "model") { $params["model"] = $model; } elseif ($attrName === "mainCategory.category_group_id" && $model->getMainCategory()) { $params["category_group_id"] = $model->getMainCategory()->category_group_id; } else { $params[$attrName] = $model->getAttribute($attrName); } } if (is_null($appendReturnUrl) === true) { $appendReturnUrl = $this->appendReturnUrl; } if (is_null($url_append) === true) { $url_append = $this->url_append; } if ($appendReturnUrl) { $params["returnUrl"] = Helper::getReturnUrl(); } return Url::toRoute($params) . $url_append; } } protected function renderDataCellContent($model, $key, $index) { if ($this->callbackButtons instanceof Closure) { $btns = call_user_func($this->callbackButtons, $model, $key, $index, $this); if (null === $btns) { $this->buttons = $this->defaultButtons; } else { $this->buttons = $btns; } } $min_width = count($this->buttons) * 34; //34 is button-width $data = Html::beginTag("div", ["class" => "btn-group", "style" => "min-width: " . $min_width . "px"]); foreach ($this->buttons as $button) { $appendReturnUrl = ArrayHelper::getValue($button, "appendReturnUrl", $this->appendReturnUrl); $url_append = ArrayHelper::getValue($button, "url_append", $this->url_append); $keyParam = ArrayHelper::getValue($button, "keyParam", "id"); $attrs = ArrayHelper::getValue($button, "attrs", []); Html::addCssClass($button, "btn"); Html::addCssClass($button, "btn-sm"); $buttonText = isset($button["text"]) ? " " . $button["text"] : ""; $data .= Html::a( $button["label"] . $buttonText, $url = $this->createUrl( $button["url"], $model, $key, $index, $appendReturnUrl, $url_append, $keyParam, $attrs ), ArrayHelper::merge( isset($button["options"]) ? $button["options"] : [], [ //"data-pjax" => 0, // "data-action" => $button["url"], "class" => $button["class"], "title" => $button["label"], ] ) ) . " "; } $data .= "
2、Helper.php文件
request->url); $returnUrlParams = []; if (isset($url["query"])) { $parts = explode("&", $url["query"]); foreach ($parts as $part) { $pieces = explode("=", $part); if (static::$returnUrlWithoutHistory && count($pieces) == 2 && $pieces[0] === "returnUrl") { continue; } if (count($pieces) == 2 && strlen($pieces[1]) > 0) { $returnUrlParams[] = $part; } } } if (count($returnUrlParams) > 0) { self::$returnUrl = $url["path"] . "?" . implode("&", $returnUrlParams); } else { self::$returnUrl = $url["path"]; } } return self::$returnUrl; } }視圖調用
1、直接調用,把Yii2自帶的["class" => "yiigridActionColumn"]換成我們新寫的["class" => "commoncomponentsActionColumn"]。
2、如直接調用不能滿足你的要求可以自定義鏈接,自定義鏈接的寫法如下:
[ "class" => "commoncomponentsActionColumn", "urlCreator" => function($action, $model, $key, $index) use ($id) { //自定義鏈接傳的參數 $params = [ $action, "option_id" => $model->option_id, "id" => $id, ]; $params["returnUrl"] = commoncomponentsHelper::getReturnUrl(); return yiihelpersUrl::toRoute($params); }, "buttons" => [ [ "url" =>"view", "class" => "btn btn-success btn-xs", "label" => Yii::t("yii", "View"), "appendReturnUrl" => false,//是否保留當前URL,默認為true "url_append" => "", "keyParam" => "id", //是否傳id,不傳設置null ], [ "url" => "update", "class" => "btn btn-primary btn-xs btn-sm", "label" => Yii::t("yii", "Update"), "appendReturnUrl" => true,//是否保留當前URL,默認為true "url_append" => "", "keyParam" => "id", //是否傳id,不傳設置null ], [ "url" => "delete", "class" => "btn btn-danger btn-xs btn-sm", "label" => Yii::t("yii", "Delete"), "options" => [ "data-action" => "delete", ], "appendReturnUrl" => true,//是否保留當前URL,默認為true "url_append" => "", "keyParam" => "id", //是否傳id,不傳設置null ], ], ],
3、新增的話,這么引用= Html::a(Yii::t("yii", "Create"), ["create","returnUrl" => Helper::getReturnUrl()], ["class" => "btn btn-success"]) ?>。
控制器邏輯1、用get獲取returnUrl,代碼:$returnUrl = Yii::$app->request->get("returnUrl");。
2、跳轉到的URL:return $this->redirect($returnUrl);。
1、此方法的好處是不動核心代碼,調用方式保留了Yii2自帶的方式。
2、不足之處是在自定義鏈接的時候需要把每一個操作update、view、delete都寫出來,不能用這種"template" => "{view}{update}{delete}"簡單且看著舒服能根據需求去寫了。
~本文完。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/21691.html
摘要:序言實現增刪改查操作成功后仍留在當前頁,能給用戶一個良好的體驗。殊途同歸,如有更好的實現方法,歡迎交流。需求分析實現增刪改查后操作成功后仍然留在當前頁面。分析總結此方法的好處是不動核心代碼,調用方式保留了自帶的方式。 序言 實現增刪改查操作成功后仍留在當前頁,能給用戶一個良好的體驗。但是 Yii2 框架本身是沒有在增刪改查操作成功后仍留在當前頁的效果的,要實現這樣的一個效果得自己寫。我...
摘要:項目中遇到的一個小功能,原來的開發的寫法可能有點冗余了,擴展性不高,又出了點小,特此回來自己寫個類似的小,遇到的一些問題記錄一下。這個里,是不可以被污染更改的。 項目中遇到的一個小功能,原來的開發的寫法可能有點冗余了,擴展性不高,又出了點小bug,特此回來自己寫個類似的小demo,遇到的一些問題記錄一下。大概這樣 一個操作保留在本地的一個小表格(簡化樣式了) 請求的數據是所有的 na...
摘要:值得一提的是擴展包不免費用于商業用途,作者用一種人類友好的方式說你使用這個擴展包就是應該去掙錢的,而不是免費的去工作這個擴展包收費美元。除了這些,還有五個沒有全面的審查的擴展包。最后,還有三個優質的包選擇于。 showImg(https://segmentfault.com/img/remote/1460000012312105?w=2200&h=1125); 開發者們都是懶惰的,不,...
閱讀 1599·2021-11-22 09:34
閱讀 1690·2019-08-29 16:36
閱讀 2668·2019-08-29 15:43
閱讀 3113·2019-08-29 13:57
閱讀 1298·2019-08-28 18:05
閱讀 1875·2019-08-26 18:26
閱讀 3243·2019-08-26 10:39
閱讀 3455·2019-08-23 18:40