私はカスタムコンポーネントを書いていて、すでに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;
}
それはその仕事をしますが、URLは次のようになります
/ actividad/10-hosteleria-y-restaurantes/11-cervecerias
私はたくさん読みましたが、記事にIDを削除するための情報しかありません(それは古いです、joomla 3.xはデフォルトでこれを行います)。これについては何もありません。誰かがこれを手伝ってくれる?
私は@ Farahmandの助けを借りて解決策を見つけました、ここにあります:
<?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)
else、array([0]=> id)
if (count($cat) == 2) {
これがtrueの場合は、 $ cat [1]:$segments[] = $cat[1];
内にエイリアスコンテンツのみが含まれるセグメント、または$ 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();
そして、それをカテゴリIDの$ vars ['categoria']:$vars['categoria'] = (int) $result;
の中に格納します。
$empresa_alias = str_replace(":","-",$segments[2]);
と書いた後、代わりに使用$ segments [1]変数$ empresa_aliasを使用しました。...com/actividades/empresa/cervecerias/ cerveceria-madriz-cafeteria
のようになりました。残りの私の見解についても同じことを繰り返します。 - http://pinto.isalcedo.com/actividades/empresa/cervecerias/cerveceria-madriz-cafeteria私の英語で申し訳ありません。これが多くの人に役立つことを願っています。
IDを表示させたくないアイテムのメニューアイテムを作成します。少なくとも親カテゴリのメニュー/actividad/10-hosteleria-y-restaurantes
この例では、エイリアス(URLの生成に使用)を任意に設定できます。