6

Tôi không chắc chắn nếu những gì tôi đang cho là giải pháp Yii tốt nhất để xử lý việc này. Vì vậy, tôi mở cửa cho các giải pháp tốt hơn. Dù cách nào là cách tốt nhất để làm điều đó.Yii2 nâng cao - Mở rộng chế độ xem để thêm biến tùy chỉnh

Tôi có thanh bên trái chỉ cần hiển thị cho người dùng đã đăng nhập. Không phải là vấn đề, tôi biết cách hiển thị nội dung nào đó bằng cách chọn 'Yii :: $ app-> user-> isGuest'.

Trên các trang cụ thể, tôi không muốn thanh bên này, NGAY CẢ nếu chúng được đăng nhập. Ví dụ: trang 'Liên hệ với chúng tôi' không cần phải có thanh bên trái trên đó. Tôi thực sự không quan tâm nếu nó có thanh bên, nhưng nó đang ném ra khỏi cột Bootstrap3.

<div class="row"> 
    <div class="col-lg-4 center-col"> 

     <div class="site-contact"> 
      <h1><?= Html::encode($this->title) ?></h1> 

      <p> 
       If you have business inquiries or other questions, please fill out the following form to contact us. Thank you. 
      </p> 

      <div class="row"> 
       <div class="col-lg-12"> 
        [contact form code truncated] 
       </div> 
      </div> 
     </div> 

    </div> 
</div> 

Có vẻ tuyệt vời, tập trung ở giữa trang, rộng 4 cols.

Tuy nhiên, trong Yii main.php của tôi (frontend/views/layouts/main.php) Tôi có 2 bố trí riêng biệt, tùy thuộc vào nếu người dùng đang đăng nhập.

<div class="container-fluid mainpage"> 

    <?= Alert::widget() ?> 

    <div class="row"> 

     <?php if (!Yii::$app->user->isGuest) { ?> 

      <div class="col-md-3 sidebar"> 
       <?= Menu::widget([ 
        'options' => ['class' => 'nav nav-sidebar'], 
        'items' => [ 
          ['label' => 'Home', 'url' => ['site/index']], 
          ['label' => 'About', 'url' => ['site/about']], 
          ['label' => 'Contact', 'url' => ['site/contact']], 
         ], 
        ]); 
       ?> 
      </div> 

      <div class="col-md-9"> 
       <?= $content ?> 
      </div> 

     <?php } else { ?> 

      <div class="col-sm-12"> 
       <?= $content ?> 
      </div> 

     <?php } ?> 
    </div> 

</div> 

Mã này, cho thấy một trang có chiều rộng đầy đủ nếu đó là khách hoặc thanh bên nếu người dùng đã đăng nhập.

Điều gì đang xảy ra trên các trang như trang 'Liên hệ với chúng tôi', biểu mẫu bị thu nhỏ vì thanh bên. Nội dung phù hợp là 'col-md-9', và khi bạn đặt biểu mẫu liên hệ vào nó (có 'col-lg-4'), nó chỉ chiếm 4 trong 9 cột, khiến nó bị nhòe.

Vì trang này (trang liên hệ) có thể xem công khai (ví dụ: nếu người dùng không thể đăng nhập, họ sẽ bị vặn và không thể liên hệ với bộ phận hỗ trợ), có thể cả hai trường hợp đều có thể xảy ra. Nó có thể được xem bởi một thành viên đăng nhập, dẫn đến hình thức scrunched, hoặc bởi một khách sẽ trông tốt.


Cách tiếp cận của tôi là thêm biến $ showSidebar. Sau đó trong contact.php có $ showSidebar = false. Hành động mặc định cho biến sẽ được thiết lập bởi isGuest và các trang có thể ghi đè lên nó để tắt thanh bên trên cơ sở mỗi trang.

Tôi thực sự không muốn một tấn nếu kiểm tra cho isGuest để hiển thị div hoặc mã thay thế, vì vậy tôi cảm thấy đây sẽ là cách tiếp cận tốt nhất.

Làm cách nào để mở rộng Chế độ xem để thêm biến của riêng tôi? Tệp nằm trong nhà cung cấp/yiisoft/yii2/web/view Tôi nghĩ ..

Đây là mẫu nâng cao Yii2.

PS: Tôi mở ra giải pháp tốt hơn cho vấn đề của mình. Tôi không muốn hack, nhưng cách thích hợp nhất để làm điều đó.

+0

tôi đã giải quyết nó, mặc dù tôi không chắc chắn nó là cách Yii nhất để làm nó. Để truy cập bộ điều khiển trong Yii2 từ bố trí của bạn (main.php) hoặc trong các trang xem (ví dụ: contact.php), bạn sử dụng '$ this-> context-> useSidebar'. Cũng đặt 'public $ useSidebar = true;' trong bộ điều khiển của bạn. Tôi có nó đúng như mặc định vì hầu hết các trang của tôi sẽ có thanh bên, chỉ trong những dịp đặc biệt tôi cần nó. Sau đó, trong contact.php, hoặc trong hành động của Controller, đặt nó thành true/false. - Một tùy chọn khác là có 2 bố trí có/không có thanh bên và trong chế độ xem (contact.php), hãy thay đổi tệp bố cục. –

+1

PS: Tôi không thêm nhận xét làm câu trả lời vì nó không trả lời câu hỏi của tôi. Tôi vẫn muốn biết cách mở rộng lớp View trong Yii2 Advanced. Tôi biết cách mở rộng một tập tin, nhưng nó phải đi đâu? Tôi biết tôi có thể đặt nó ở bất cứ nơi nào, nhưng phải có một cách sử dụng phổ biến của nơi để đưa các lớp mở rộng này cho sự nhất quán giữa các nhà phát triển. –

+0

điều gì sai khi sử dụng 2 bố cục và trong hành động điều khiển của bạn, hãy thay đổi bố cục nếu bạn cần? Bố cục mặc định có thể là bố cục có thanh bên và trên các trang mà bạn không cần thanh bên, bạn thay đổi bố cục. Nhưng tôi biết, điều này chỉ giải quyết một nửa vấn đề của bạn :) – Asped

Trả lời

2

Vì dạng xem là thành phần Yii, bạn có thể thiết lập nó giống như các thành phần khác trong tệp cấu hình yii. Chỉ cần thêm sth như sau:

'components'  => [ 
     'view'   => [ 
      'class' => 'app\components\extended\View', 
     ], 
+0

Nơi nào hầu hết mọi người đặt các tập tin mở rộng? Tôi nhận thấy bạn đặt nó trong thư mục "mở rộng". Ngoài ra, thiết lập nâng cao không có thư mục thành phần. Tôi đang tìm kiếm quy ước thay vì chỉ ném chúng bất cứ nơi nào tôi muốn ngày hôm đó. –

+0

Ok, hãy tiếp tục từng bước. Vui lòng cho tôi biết điều đó có phù hợp với bạn hay không và sau đó chúng tôi xem xét vị trí đặt nó. – Asped

1

Tôi nghĩ rằng giải pháp tốt nhất là tạo hai bố cục. Một với thanh bên và một không có thanh bên và sử dụng bố cục mong muốn.

0

Giải pháp tốt nhất theo tôi là tạo bảng cài đặt cơ sở dữ liệu được ánh xạ tới người dùng và tổ chức và lưu menu trong bảng đó cho người dùng cụ thể liên quan đến tổ chức.Vì vậy, bạn có thể kiểm soát menu theo từng người dùng cụ thể cho tổ chức.

Cũng lưu một menu mặc định trong các thiết lập mà bạn có thể hiển thị cho phi sử dụng đăng nhập (vì đó là mặc định cho tất cả mọi người)

Các vấn đề liên quan