Рейтинг:  0 / 5

Звезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активна
 
  • Версия CMS Joomla: 3.4.8
  • Компоненты стандартные.
  • Включена и успешно работает встроенная мультиязычность сайта.
  • Устанавливать сторонние расширения нет необходимости.

В принципе, обеспечить вывод всех материалов определённого пользователя на сайте совсем просто при помощи стандартного компонента контактов. Для этого следует в первую очередь закрепить за определённым юзером его статьи, а сделать это можно в настройках самого материала во вкладке Publishing. Затем создать в компоненте Контакты новый контакт, закрепить за ним юзера, выставить свои личные настройки (что нужно показывать, а что нет), затем в меню создать новый пункт вывода данного контакта и всё, вуаля, готово! Да, для этого в настройках контакта в компоненте контактов следует во вкладке Display включить показ статей пользователя (Show User Articles) и выставить количество показываемых материалов авторства данного юзера (Show # Articles to List). В принципе, это всё.

У меня начались глюки, когда я решила включить мультиязычность сайта. Всё включила, всё работает, кроме правильного отображения материалов юзера (надеюсь, больше ничего не заглючило). Как оказалось методом тестов и анализа, при включённой мультиязычности нужно, чтобы все статьи были на всех включённых языках, иначе не подкрепляются материалы пользователя, написанные только на 1 языке, а лепятся материалы других пользователей и без авторов тоже. После долгого и мучительного копания в настройках в течение дня, решила залезть в код и нашла причину глюка и метод его устранения. Итак!

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

Следует найти и открыть на редактирование файлик components/com_contact/models/contact.php

В нём ищем строчку // Filter per language if plugin published и комментируем следующие строки после неё (то есть заключаем весь код, кроме найденной первой строчки - она и так закомменчена, в комментарии по примеру: /*КОД, ЧТО НУЖНО ЗАКОММЕНТИРОВАТЬ*/

// Filter per language if plugin published
   if (JLanguageMultilang::isEnabled())
     {
	$query->where(
		('a.created_by = ' . (int) $result->user_id) . ' AND ' .
		('a.language=' . $db->quote(JFactory::getLanguage()->getTag()) . ' OR a.language=' . $db->quote('*'))
						);
					}

   if (is_numeric($published))
					{
	$query->where('a.state IN (1,2)')
							
->where('(a.publish_up = ' . $nullDate . ' OR a.publish_up <= ' . $nowDate . ')')
	->where('(a.publish_down = ' . $nullDate . ' OR a.publish_down >= ' . $nowDate . ')');
     }

Чтобы получилось примерно так:

/* if (JLanguageMultilang::isEnabled())
     {
	$query->where(
		('a.created_by = ' . (int) $result->user_id) . ' AND ' .
		('a.language=' . $db->quote(JFactory::getLanguage()->getTag()) . ' OR a.language=' . $db->quote('*'))
						);
					}

    if (is_numeric($published))
					{
	$query->where('a.state IN (1,2)')
		->where('(a.publish_up = ' . $nullDate . ' OR a.publish_up <= ' . $nowDate . ')')
		->where('(a.publish_down = ' . $nullDate . ' OR a.publish_down >= ' . $nowDate . ')');
      }*/

У меня данная правка сработала и теперь выводятся все материалы пользователя, независимо есть ли у них переводы на все языки или нет, чужие материалы больше не видны. Таким образом, у меня получился вывод всех материалов пользователя стандартными возможностями Joomla 3 при включённой мультиязычности.