J'écris un composant personnalisé. J'ai la vue employees
. Sous cette vue, j'ai deux mises en page, default
et modal
.Erreur 500 "Affichage introuvable" lors de l'utilisation de SEF et de la réécriture d'URL
J'ai un élément de menu dans le premier niveau du menu principal, Employees
qui pointe à mon avis des employés:
index.php?option=com_mycomponent&view=employees
qui décide de domain.com/joomla/employees
et displayes la vue par défaut comme prévu.
Maintenant, dans mon élément, je veux créer un lien vers le point de vue modal, et je le fais en utilisant JRoute et cette url:
index.php?option=com_mycomponent&view=employees&layout=modal
qui décide de
domain.com/joomla/employees/modal
Et produit cette erreur:
500 - View not found [name, type, prefix]: modal, html, mycomponentView
Si je visite index.php en utilisant index.php?option=com_mycomponent&view=employees&layout=modal
ma vue modale est affichée.
J'ai également constaté que la visite domain.com/joomla/employees/employees/modal
affiche la disposition correcte. C'est comme si joomla oublie quelle vue est associée à l'élément de menu au /joomla/employees
, et cherche plutôt la vue "modal" à moins que les "employés" supplémentaires soient fournis dans l'url.
À noter également, domain.com/joomla/employee?layout=modal
fonctionne très bien aussi bien.
Voici ce que j'ai pour mon router.php. Ce fichier a été généré pour moi en utilisant le générateur de composants au j-cook.pro.
<?php
defined('_JEXEC') or die;
function MycomponentBuildRoute(&$query){
$segments = array();
if(isset($query['view']))
{
$view = $query['view'];
$segments[] = $view;
unset($query['view']);
}
if(isset($query['layout']))
{
$segments[] = $query['layout'];
unset($query['layout']);
}
if(isset($query['id']))
{
if(in_array($view, array('edit','view','view','editfacility','view','edit','client','editclient','viewposition','editposition','edit','view','edit','view','view','edit','view','edit','view','edit','view','edit')))
{
$segments[] = (is_array($query['id'])?implode(',', $query['id']):$query['id']);
unset($query['id']);
}
};
return $segments;
}
function MycomponentParseRoute($segments)
{
$vars = array();
$vars['view'] = $segments[0];
$nextPos = 1;
if (isset($segments[$nextPos]))
{
$vars['layout'] = $segments[$nextPos];
$nextPos++;
}
if(in_array($vars['view'], array('edit','view','view','editfacility','view','edit','client','editclient','viewposition','editposition','edit','view','edit','view','view','edit','view','edit','view','edit','view','edit'))
&& isset($segments[$nextPos]))
{
$slug = $segments[$nextPos];
$id = explode(':', $slug);
$vars['id'] = (int) $id[0];
$nextPos++;
}
return $vars;
}
Veuillez inclure une copie de votre routeur.php dans le répertoire racine du composant ('/ components/com_mycomponent/router.php'). Ce fichier gère l'analyse et la construction des URL SEF et doit être corrigé pour gérer ce cas! –
Hey! Merci beaucoup! Je n'avais même pas regardé ce dossier jusqu'à maintenant. J'ai édité la question pour inclure le contenu. J'espère que cela me mettra sur la bonne voie pour le comprendre, mais j'apprécierais beaucoup plus de perspicacité que vous pouvez fournir. Merci encore. –