Как сделать так, чтобы авторизованный пользователь видел только свои материалы и не видел материалы других пользователей, в пределах какой-то определенной категории. Сами материалы для пользователей будут создаваться в админ части и автором материала будет задавться определенный пользователь.  В списке материалов будут выводиться только материалы пользователя и соответственно не будет  выводиться содержание материала при его открытии, вместо содержимого будет сообщение о том, что нужно сначала зарегистрироваться.

Для решения этого к сожалению используется небольшой хак (то есть при обновлении joomla это изменение может быть затерто). 

В файле administrator/components/com_contentaccess.xml добавляем строку:

<action name="core.show.other" title="JACTION_SHOWOTHER" description="COM_CONTENT_ACCESS_SHOWOTHER_DESC" />

в три секции component, category, article

Это и есть тот хак, который может быть затерт при обновлении Joomla.

В настройках прав для компонента разрешим авторизованным пользователям смотреть чужие материалы.

Как отображать для пользователя только его материалы

Создем категорию, в которой будут лежать материалы для авторизованных пользователей. 

И в правах этой категории делаем запрет.

Как отображать для пользователя только его материалы

Потом создаем пункт меню, например, Список материалов категории. И в соответствующие файлы шаблона компонента материалов добавляем такой код:

В файл components/com_content/models/articles.php перед

// Filter by start and end dates.
$nullDate	= $db->Quote($db->getNullDate());

добавляем код:

$app = JFactory::getApplication();
$action = &#39;core.show.other&#39;;
$jinput = $app->input;
 
$assetName = &#39;com_content.category.&#39; . (int) $categoryId;
$allowShowOther = $user->authorise($action, $assetName);
 
if ((!$allowShowOther && $user->id)){ 
	$query->where("created_by = $user->id");
}

В файл для вывода материала templates/имяшаблона/html/com_content/articledefault.php добавляем после 

// Create shortcuts to some parameters.
$params = $this->item->params;
$images = json_decode($this->item->images);
$urls = json_decode($this->item->urls);
$canEdit = $this->item->params->get(&#39;access-edit&#39;);
$user = JFactory::getUser();

такой код:

<?php
$action = &#39;core.show.other&#39;;
$assetName = &#39;com_content.article.&#39; . (int) $this->item->id;
$allowShowOther = $user->authorise($action, $assetName);
 
if ((!$allowShowOther && $user->id) && ($user->id != $this->item->created_by)){
	JError::raiseNotice( &#39;403&#39;, &#39;File access denied!&#39; );
	return;
}
 
//echo ($allowShowOther ? 1 : 0);
?>

 

 

Чтобы сделать комментарий, нужно авторизоваться на сайте!