- Версия 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 при включённой мультиязычности.