Доброго времени!
Чёрт дёрнул переписать свой компонент под Joomla 3 (((
Взял за аналогию сom_content и вроде всё как бы получилось. Выводятся материалы из таблицы сортируются итп.
Но когда кликаешь на редактирование просто белый экран (
В логах веб сервера наблюдаю вот такое вот сообщение:
Call to a member function getKeyName() on a non-object in /test/libraries/legacy/controller/form.php on line 387"
Понимаю что дело в Контроллере форм.
Облазил весь инет, но нормальной документации на joomla3 так и не нашёл (( много отличий получается.
Кто нибудь может подсказать на каком этапе вызывается этот метод?
Вот класс моего контроллера, ошибка где то здесь. Проверил его уже несколько раз всё в с ним в порядке. Аналогичен ком контентовскому только с исправлениями вьюшек.
class MyshopControllerMyshop extends JControllerForm
{
/**
* Class constructor.
*
* @param array $config A named array of configuration variables.
*
* @since 1.6
*/
public function __construct($config = array())
{
parent::__construct($config);
// An article edit form can come from the articles or featured view.
// Adjust the redirect view on the value of 'return' in the request.
if ($this->input->get('return') == 'featured')
{
$this->view_list = 'featured';
$this->view_item = 'myshop&return=featured';
}
}
/**
* Method override to check if you can add a new record.
*
* @param array $data An array of input data.
*
* @return boolean
*
* @since 1.6
*/
protected function allowAdd($data = array())
{
$user = JFactory::getUser();
$categoryId = JArrayHelper::getValue($data, 'catid', $this->input->getInt('filter_category_id'), 'int');
$allow = null;
if ($categoryId)
{
// If the category has been passed in the data or URL check it.
$allow = $user->authorise('core.create', 'com_myshop.category.' . $categoryId);
}
if ($allow === null)
{
// In the absense of better information, revert to the component permissions.
return parent::allowAdd();
}
else
{
return $allow;
}
}
/**
* Method override to check if you can edit an existing record.
*
* @param array $data An array of input data.
* @param string $key The name of the key for the primary key.
*
* @return boolean
*
* @since 1.6
*/
protected function allowEdit($data = array(), $key = 'id')
{
$recordId = (int) isset($data[$key])? $data[$key] : 0;
$user = JFactory::getUser();
$userId = $user->get('id');
// Check general edit permission first.
if ($user->authorise('core.edit', 'com_myshop.myshop.' . $recordId))
{
return true;
}
// Fallback on edit.own.
// First test if the permission is available.
if ($user->authorise('core.edit.own', 'com_myshop.myshop.' . $recordId))
{
// Now test the owner is the user.
$ownerId = (int) isset($data['created_by'])? $data['created_by'] : 0;
if (empty($ownerId) && $recordId)
{
// Need to do a lookup from the model.
$record = $this->getModel()->getItem($recordId);
if (empty($record))
{
return false;
}
$ownerId = $record->created_by;
}
// If the owner matches 'me' then do the test.
if ($ownerId == $userId)
{
return true;
}
}
// Since there is no asset tracking, revert to the component permissions.
return parent::allowEdit($data, $key);
}
/**
* Method to run batch operations.
*
* @param object $model The model.
*
* @return boolean True if successful, false otherwise and internal error is set.
*
* @since 1.6
*/
public function batch($model = null)
{
JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN'));
// Set the model
$model = $this->getModel('Myshop', '', array());
// Preset the redirect
$this->setRedirect(JRoute::_('index.php?option=com_myshop&view=myshops' . $this->getRedirectToListAppend(), false));
return parent::batch($model);
}
/**
* Function that allows child controller access to model data after the data has been saved.
*
* @param JModelLegacy $model The data model object.
* @param array $validData The validated data.
*
* @return void
*
* @since 3.1
*/
protected function postSaveHook(JModelLegacy $model, $validData = array())
{
return;
}
}
Но почему то дальше конструктора дело не идёт. Спасиб