J'écris un composant personnalisé et j'ai déjà terminé le fichier router.php:
defined('_JEXEC') or die;
function empresaBuildRoute(&$query) //Esta función divide la url y se trae las variables.
{
$segments = array();
if (isset($query['view']))
{
$segments[] = $query['view'];
unset($query['view']);
}
if (isset($query['padre']))
{
$segments[] = $query['padre'];
unset($query['padre']);
};
if (isset($query['id']))
{
$segments[] = $query['id'];
unset($query['id']);
};
if (isset($query['categoria']))
{
$segments[] = $query['categoria'];
unset($query['categoria']);
};
if (isset($query['empresa']))
{
$segments[] = $query['empresa'];
unset($query['empresa']);
};
return $segments;
}
function empresaParseRoute($segments) //Esta función reconoce las variables y las reacomoda.
{
//print_r($segments); //Si deseas verificar el contenido de la Array "segments".
$vars = array();
switch($segments[0])
{
case 'actividad': //Verifica las View y según cada una del componente, ordena las variables.
$vars['view'] = 'actividad';
$id = explode(':', $segments[2]); //Los segmentos son una array que contiene otra array
$vars['id'] = (int) $id[0]; //La posicion 0 de la array contenida en la posicion 2 de la array anterior
break;
case 'empresa':
$vars['view'] = 'empresa';
print_r($segments);
$categoria = explode(':', $segments[1]);
$vars['categoria'] = (int) $categoria[0];
$empresa = explode(':', $segments[2]);
$vars['empresa'] = (int) $empresa[0];
break;
}
return $vars;
}
Il fait son travail mais l'url ressemble à
/ actividad/10-hosteleria-y-restaurantes/11-cervecerias
J'ai beaucoup lu, mais il n'y a que des informations sur la suppression d'identifiant dans les articles (c'est vieux, joomla 3.x le fait par défaut), rien à ce sujet. Quelqu'un peut il m'aider avec ça?
J'ai trouvé la solution à l'aide de @ Farahmand, la voici:
<?php
defined('_JEXEC') or die;
function empresaBuildRoute(&$query) //Esta función divide la url y se trae las variables.
{
$segments = array();
if (isset($query['view']))
{
$segments[] = $query['view'];
unset($query['view']);
}
if (isset($query['padre']))
{
$segments[] = $query['padre'];
unset($query['padre']);
};
if (isset($query['id']))
{
$segments[] = $query['id'];
unset($query['id']);
};
if (isset($query['categoria']))
{
$cat = explode(':', $query['categoria']); //Variable temporal para guardar solo el alias de la categoria
if (count($cat) == 2) { //Contar los valores, si son dos es porque existe ID y Alias
$segments[] = $cat[1];
} else { //Caso contrario, seleccionar la categoría pues esta contendría solo el ID
$segments[] = $query['categoria'];
}
unset($query['categoria']);
};
if (isset($query['empresa']))
{
$segments[] = $query['empresa'];
unset($query['empresa']);
};
return $segments;
}
function empresaParseRoute($segments) //Esta función reconoce las variables y las reacomoda.
{
print_r($segments); //Si deseas verificar el contenido de la Array "segments".
$vars = array();
switch($segments[0])
{
case 'actividad': //Verifica las View y según cada una del componente, ordena las variables.
$vars['view'] = 'actividad';
$id = explode(':', $segments[2]); //Los segmentos son una array que contiene otra array
$vars['id'] = (int) $id[0]; //La posicion 0 de la array contenida en la posicion 2 de la array anterior
break;
case 'empresa':
$vars['view'] = 'empresa';
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select('id');
$query->from($db->quoteName('#__categories'));
$query->where($db->quoteName('alias')." = ".$db->quote($segments[1]));
$db->setQuery($query);
$result = $db->loadResult();
$vars['categoria'] = (int) $result;
$empresa_alias = str_replace(":","-",$segments[2]);
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select('id');
$query->from($db->quoteName('#__viviren_empresa'));
$query->where($db->quoteName('alias')." = ".$db->quote($empresa_alias));
$db->setQuery($query);
$empresa = $db->loadResult();
$vars['empresa'] = (int) $empresa;
break;
}
return $vars;
}
?>
array([0]=> id, [1]=> alias)
sinon sera array([0]=> id)
if (count($cat) == 2) {
si cela est vrai, le segment ne contient que le contenu de l'alias à l'intérieur de $ cat [1] : $segments[] = $cat[1];
Sinon il va remplir avec $ query ['categoria'] : else { $segments[] = $query['categoria']; }
$db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select('id'); $query->from($db->quoteName('#__categories')); $query->where($db->quoteName('alias')." = ".$db->quote($segments[1])); $db->setQuery($query); $result = $db->loadResult();
Et stockez cela à l'intérieur de $ vars ['categoria'] : $vars['categoria'] = (int) $result;
pour l'identifiant de la catégorie.
$empresa_alias = str_replace(":","-",$segments[2]);
then à la place d’utilisation des $ segments [1] J'ai utilisé la variable $ empresa_alias ....com/actividades/empresa/cervecerias/ cerveceria-madriz-cafeteria
Sans id dans "cervecerias". Je vais répéter la même chose avec le reste de mes opinions. - http://pinto.isalcedo.com/actividades/empresa/cervecerias/cerveceria-madriz-cafeteriaDésolé pour mon anglais et j'espère que cela peut aider beaucoup de gens.
Créez un élément de menu pour tous les éléments pour lesquels vous ne souhaitez pas afficher d'identifiant, à tout le moins un élément de menu pour la catégorie parente /actividad/10-hosteleria-y-restaurantes
_ dans votre exemple, l'alias (utilisé pour générer l'URL) peut être défini sur ce que vous voulez.