2017-05-15 2 views
0

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

Antwort

0

Sie kein Produkt "krakow" genannt haben?

Wenn nicht, können Sie versuchen, den $ productName aus der Build-Funktion zu entfernen, nur um zu überprüfen, ob dieser "krakow" automatisch hinzugefügt wird oder von der Funktion getProductName() kommt.

Auch bemerkte ich, dass Sie einen Fehler habe ich in der Funktion getProductName erraten()

->where('#__s4edu_product.product_id = ' . $productId) 

Es sollte ist sein

->where('#__component_product.product_id = ' . $productId) 
Verwandte Themen