it-swarm-tr.com

Bir bileşenin içinden bir menü öğesine giden rotayı ayarlamanın doğru yolu nedir?

Bu yüzden yeni bir bileşenim üzerinde çalışıyorum ve belirli bir eylem için erişim engellendiğinde bir menü öğesine yönlendirmek istiyorum.

Masamda bir menu_id alanı oluşturdum ve menu itemdini saklamak için menuitem form alanı türünü kullanıyorum.

SetRedirect kontrol cihazlarını bu şekilde kullanabileceğimi düşündüm

if($isRestricted && !$canDownload)
{
    $msg = $this->translate('COM_BABELU_PRODUCTS_DL_NOT_AUTHORISED');
    $this->setRedirect('index.php?itemId=101', $msg, 'warning');
    return false;
}

Ancak işe yaramadı. sadece öğe kimliğini rotaya ekledi

http://mysite.com/previous-menu-item-alias?itemId=101

Bu, 101 numaralı kimliğe sahip menü öğesiyle ilişkili görünümü bile yüklemedi.

Rotanın tamamını belirtmem gerekiyor mu? I.E. #__menus tablosundan bağlantıya bakın ve ardından JRoute'u bu değerle arayın?

Herkes bu konuda exp varsa gerçekten herhangi bir bilgi takdir ediyorum.

---- Düzenle --- Daha önce #__menus tablosunu doğrudan sorgulayıp bağlantı değerini alıp bunu JRoute'a iterek yaptım. Ancak doğrudan bir bağımlılık oluşturduğu için doğrudan tablo sorgulama fikrini sevmiyorum. Gerçekten bilmek istiyorum #__menus tabloya dokunmadan veya sadece itemId kullanarak bir menü öğesine yönlendirmek için bir yol varsa bağlantı değeri almaktır.

1
Mathew Lenning

Tamam. Cevabı buldum.

İlk önce #__menus tablo bu kodu kullanın:

$app = JFactory::getApplication();
$menu = $app->getMenu();
$item = $menu->getItem($itemId);

Şimdi yeniden yönlendirme biraz zor, çünkü uygun rotayı kullanmak istiyorum, ancak rotayı JRoute'a gönderirsem, bir hatayla karşılaşıyorum çünkü JRoute sadece mevcut aktif öğeye url içeriğini ekliyor . Aşağıdaki örnek denetleyiciden çağrılmaktadır.

Misal:

 //current url = http://mysite.com/product
 //$item->route = my-page 

$this->setRedirect(JRoute::_($item->route));
$this->redirect();


//resulting url = http://mysite.com/product/my-page

Bu tabii ki 404 atıyor çünkü bu rota mevcut değil. "ürün" bileşenimin bir parçası "sayfam" bir com_content makale öğesidir.

Ancak URI'yi ekleyerek bunun üstesinden gelebilirsiniz:

$route = $item->route;
If((int)$item->home === 1)// its the home menu item, so clear the route
{
    $route = '';
}

$this->setRedirect(JURI::base().$route);
$this->redirect();

// resulting url = http://mysite.com/my-page

Bunu $item->link ve $item->route ve aynı şekilde çalışıyor gibi görünüyor. Sitenin arama motoru dostu URL'ler kullanmaması durumunda bağlantıyı kullanmak daha iyidir.

Umarım bu yardımcı olur!

3
Mathew Lenning