Veritabanı odaklı navigasyon Giriş / Çıkış bağlantıları?

2 Cevap php

menus ve menu_items, bu tamamen "statik" bağlantıları için güzel çalışır ama şimdi ben dinamik bir bağlantı (giriş olması gerekir: Ben esas olarak iki tablolardan oluşan bir veritabanı tabanlı navigasyon var /) çıkış.

Benim menu_items tablo sadece el admin eklenen sayfalara bağlantılar oluşur. Yani şimdi ben masa ayarlamak ve "dinamik" bağlantılarını işleyebilir ki muhtemelen böyle modellemek gerekir.

İşte menu_items tablo için şema bulunuyor:

CREATE TABLE `menu_items` (
  `id` int(11) NOT NULL auto_increment,
  `menu_id` int(11) default NULL,
  `label` varchar(250) default NULL,
  `page_id` int(11) default NULL,
  `link` varchar(250) default NULL,
  `position` int(11) default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8

Menü id başka bir tabloya karşılık, bu yüzden örneğin 1 birincil nav olduğunu, 2 yardımcı nav olabilir. Pozisyonu menü öğesi görüntülendiği her menü sipariş göreli anlamına gelir. Bağlantı sadece bir alan, örneğin '/ user / login' dir.

Benim menüler her döngü ve Navigasyon kapları oluşturmak ve bunun için Zend Navigasyon kullanıyorum.

İşte benim giriş alanı için kullanıyorum mantık, ben bu over hareket ve dinamik navigasyon içine dahil etmek gerekir:

<?php if($this->identity == null) { ?>
    <p><a href='/user/login'>Login</a></p>
<?php }else{ ?>
    <p>Welcome back <?php echo $this->identity->first_name;?></p>
    <p>To log out <a href='/user/logout'>click here</a></p>
<?php } ?>

Ben kullanıcı giriş ya da değil ve bu boyunca menü öğesinin yeni erişim sütun değeri, ya da bir şey sorgulamak olup olmadığını hesaba benim Menü modeli güncellemek sonra, menü öğeleri her biri için erişim düzeyi için yeni bir sütun eklemek gerekiyor gibi görünüyor çizgiler. Herkes herhangi bir öneriniz var mı?

2 Cevap

Gordon'un ACL gitmek için yol (ve bunu upvoted). Ben sadece boru istedim ve ben tam olarak ne açıklar.

Ben her iki sign in ve benim navigasyon config sign out sayfaları oluşturduk:

    <user_signin>
      <label>Sign in</label>
      <other_stuff></other_stuff>
      <resource>mvc:user_signin</resource>
      <privilege>navigate</privilege>
    </user_signin>

    <user_signout>
      <label>Sign out</label>
      <other_stuff></other_stuff>
      <resource>mvc:user_signout</resource>
      <privilege>navigate</privilege>
    </user_signout>

Sonra, benim EDL'deki:

// 'mvc:home' is wide open, 'user' role inherits from 'guest'
$this->addResource(new Zend_Acl_Resource('mvc:user_signin'), 'mvc:home');
$this->deny('user', 'mvc:user_signin', 'navigate');

$this->addResource(new Zend_Acl_Resource('mvc:user_signout'), 'mvc:home');
$this->deny('guest', 'mvc:user_signout', 'navigate');
$this->allow('user', 'mvc:user_signout', 'navigate');

Bu şekilde, bu navigasyon sadece başka bir parçası, ve hemen arkasında küçük bir mantıkla, geri kalanı gibi davranır.

Ben Zend_Acl ile elde edebiliriz sanırım. Tüm yerleşik Navigasyon yardımcıları ACL ve çeviri ile entegrasyon eklemek.

Dan http://framework.zend.com/manual/en/zend.view.helpers.html

{get|set}Acl(), {get|set}Role(), gets/sets ACL (Zend_Acl) instance and role (String or Zend_Acl_Role_Interface) used for filtering out pages when rendering, and {get|set}UseAcl() controls whether ACL should be enabled. The methods hasAcl() and hasRole() checks if the helper has an ACL instance or a role registered.

Oturum açmış bir ziyaretçinin bir-logged-in ziyaretçi (konuğu vs kullanıcı) farklı bir rolü varsa, bu çalışması gerekir. Ben daha önce bunu gerek yoktu hiç, bu yüzden herhangi bir kod parçacıkları vermek, ama http://www.youtube.com/watch?v=n31mQGZxtbE hem de birleştirmek için nasıl bir video eğitimi için kontrol edemez.

I still don't get why you want to refactor this though, as moving it seems to be a hassle and adds unneccessary complexity for something that could live happily in a separate View Helper. So, why not keep it simple :)