Nie, ale już znalazłem o wiele prostsze rozwiązanie:
Kod:
jimport('joomla.application.component.helper');
$params = JComponentHelper::getParams('com_sample');
$menuType= $params->get('menuType');
$comp = JComponentHelper::getComponent('com_sample');
$comId= $comp->id;
$link = 'index.php?option=com_sample&view=test&id=';
$link .= $this->id;
$menuTable = JTableNested::getInstance('Menu');
$menuData = array(
'menutype' => $menuType,
'title' => $this->title,
'alias' => $this->alias,
'path' => $this->alias,
'link' => $link,
'type' => 'component',
'component_id' => $comId,
'language' => '*',
'published' => 1,
'access' => 1,
);
// this item is at the root so the parent id needs to be 1
$parent_id = 1;
$menuTable->setLocation($parent_id, 'last-child');
// save is the shortcut method for bind, check and store
if (!$menuTable->save($menuData))
{
$this->setError($menuTable->getError());
return false;
}
Problemem może być pobranie ID elementu na poziomie tworzenia go, ale w mojej głowie tworzą się dwa rozwiązania:
1) jeśli mamy pewność, że do strona nie będzie obsługiwana przez duża ilość użytkowników, przez co nie będzie możliwości dodawania dwóch elementów przez dwóch różnych administratorów w tym samym czasie, to można pobrać MAX(id) z tabeli komponentu i powiększyć go o 1. Aby nie było problemów z opcją auto-increment w MySQL, należałoby od razu zdefiniować id elementu.
2) w widoku dodawania pojedynczego elementu (załóżmy test) zastosować ten skrypt. Wtedy przy zapisie tworzona byłaby pozycja menu z linkiem w postaci index.php?option=com_sample&view=test&id=0
Następnie w widoku test i tests zastosowac skrypt, który pobbrałby wszystkie elementy z menu, które spełniają warunek link = index.php?option=com_sample&view=test&id=0 i zaktualiwoać wartości o odpowiednie id.
Owszem, w obu przypadkach nie jest to doskonałe rozwiązanie i nie będzie działało w 100%, ale będą spełniały swoje funkcje.