Ich habe meine eigene Komponente in Joomla bauen und Client will jetzt eine freundliche URLs f.e website.com/irgendwo/{product-id}-{product-name}. Also baue ich meinen eigenen Router so.joomla - router Änderung url, wenn Sie den Namen des Produkts
function componentBuildRoute(&$query)
{
$segments = [];
if (isset($query['view'])) {
$segments[] = "szkolenie";
unset($query['view']);
}
if (isset($query['product_id'])) {
$productName = JFilterOutput::stringURLSafe(strtolower(getProductName($query['product_id'])));
$newName = $query['product_id'] . '-' . $productName;
$segments[] = $newName;
unset($query['product_id']);
}
return $segments;
}
und analysieren Routenfunktion
function componentParseRoute($segments)
{
$app = JFactory::getApplication();
$menu = $app->getMenu();
$item =& $menu->getActive();
$count = count($segments);
switch ($item->query['view']) {
case 'catalogue' : {
$view = 'training';
$id = $segments[1];
}
break;
}
$data = [
'view' => $view,
'product_id' => $id
];
return $data;
}
Während am Ende der Buildroute Funktion Segmente sind ok Ich habe genau das, was ich will, dass am Anfang der Parse-Route, die ich so etwas wie habe website.com/ szkolenie/1-krakow < - Ich weiß nicht wtf ist das krakau (ich weiß, es ist Stadt in Polen) aber immer noch wo kommt es her? Die getProductName Funktion Implementierung ist
function getProductName($productId)
{
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select('#__component_training.id as id, #__component_product' . name)
->from($db->quoteName('#__component_training'))
->where('#__s4edu_product.product_id = ' . $productId)
->leftJoin('#__component_product ON
#__component_training.product_id=#__component_product.product_id');
$training = $db->loadObject();
return trim($training->name);
}
So all dies in Betracht gezogen wird denke ich, dass etwas passiert zwischen dem Buildroute und parseRoute, etwas, was die $ Segmentfilter [1] variabel, aber wie das deaktivieren, und warum ist es Ereignis ?
P. S Bitte mich nicht zu https://docs.joomla.org/Joomla_Routes_%26_SEF senden bereits alle Tutorials auf joomla Website Ich weiß, was alles mit sef enthält.
P.S.S
Es auf joomla gebaut 3.7.0