iT邦幫忙

1

opencart 4.0.0.0 的後台模版多了一個類型

  • 分享至 

  • xImage

以前的模版只有兩種,列表與表單。例如在 2.x 版
product_list.tpl
product_form.tpl

3.x版
product_list.twig
product_form.twig

現在 4.x版 則是
product.twig
product_list.twig
product_form.twig

多拆了一個模版。有什麼用意嗎?

我看 Controller, 也多拆了一個 list()。以前是 index() 結尾去呼叫 getList()

	public function index() {
		$this->load->language('catalog/product');

		$this->document->setTitle($this->language->get('heading_title'));

		$this->load->model('catalog/product');

		$this->getList();
	}

現在則是在 index() 裡面,是先呼叫 getList(),但是做為 $data['list'] 的內容。最後才又呼叫 product.twig。

    public function index(): void {
        ...
        $data['list'] = $this->getList();
        ...
        $this->response->setOutput($this->load->view('catalog/product ', $data));
    }

product_list.twig 的內容,是 product.twig 的一部份內容。這樣拆的用意是?

然後另外多了一個函數

    public function list(): void {
        $this->load->language('catalog/product');

        $this->response->setOutput($this->getList());
    }

我把這函數刪除,後台產品的列表頁也正常。這個 list() 有什麼作用嗎?

ronrun iT邦新手 4 級 ‧ 2022-06-20 23:49:34 檢舉
我來自問自答。現在剛出來的是期盼已久的 4.0.0.0。試用了幾天,有發現一些問題。但因為我其實是要使用它的模板,搭配 Laravel 框架。所以還是先研究一下。

長話短說就是:

以前都是請求 index() 然後去呼叫 getList 或是 getForm。這一版拆了一個 list()。不再請求 index(),而是請求 list(),然後在 list() 裡面去呼叫 getList(),存成 $data['list']。

這樣拆的目的是為了把列表頁拆成兩個模版,一個是整體的,一個是列表表格本身。這樣一來,就可以對列表表格做 ajax 替換。比如點擊分頁的時候,以前是整個頁面轉址過去,轉到 page=3, 或 page=4。

現在點擊頁數連結,頁面不會轉址,網址列也不會變。但是會透過 ajax 方法,替換列表表格的內容。

這樣左側欄不用重抓。而左側欄牽涉權限,所以不只是選單不用重抓,使用者權限也不用重抓。算是把 ajax 做了很好的運用。
ronrun iT邦新手 4 級 ‧ 2022-06-21 00:14:24 檢舉
剛發現有說錯。但是同時發現我剛打的其實不是"回答",而是"討論"。而且重新編輯"討論"的內容,存了之後內容竟然沒變。

說錯的地方是,還是會先請求 index()。

有兩種情況。以會員管理為例
1 點擊左側欄的 Customers / Customers ,會請求 index(),然後在這裡面去呼叫 getList。程式碼:
$data['list'] = $this->getList();

2 點擊表格下方的頁數連結,改成請求 list(),然後這個內容只有兩行
public function list(): void {
$this->load->language('customer/customer');

$this->response->setOutput($this->getList());
}
而 getList() 本身所生成的內容,其最外層 html tab 是 <form>。

因此,當點擊頁數的時候,就可以只替換表格內容。
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友回答

立即登入回答