Последовательность работы (выполнения) компонентов Joomla. Хаки и дополнения Бездоказательный weblinks php

Точка входа в Joomla! компонент подобна у большинства компонентов. Для этого примера мы будем использовать один из компонентов ядра Joomla – Web Links (Ссылки на сайты). Первый файл, который будет выполнен во front-end: …/components/com_weblinks/weblinks.php .

Сначала мы видим проверку безопасности, предназначенную для уверенности, что никто не сможет вызвать эту страницу непосредственно. Это стандарт, который должен использоваться во всех ваших php-файлах (хотя есть несколько исключений):

Мы проверяем строку запроса, чтобы посмотреть, было ли отправлено определенное название контроллера. Если так, мы удостоверяемся, что можем загрузить необходимый файл в каталоге контроллеров:

// Require specific controller if requested if ($controller = JRequest:: getWord ("controller" ) ) { $path = JPATH_COMPONENT. DS. "controllers" . DS. $controller . ".php" ; if (file_exists ($path ) ) { require_once $path ; } else { $controller = "" ; } }

Теперь мы создаем экземпляр класса нашего контроллера, используя имя, которое определили выше:

Как только задача выполнена, производим редирект, если он требуется:

// Redirect if set by the controller $controller -> redirect () ;

Класс контроллера (Controller Class)

Общий (характерный) контроллер для компонента ссылок находится здесь: …/components/com_weblinks/controller.php .
Весь этот класс определяет метод display, который является используемым по умолчанию, если пользователь не определяет другую задачу (task).

defined ("_JEXEC" ) or die ( "Restricted access" ) ; jimport("joomla.application.component.controller" ) ; /** * Weblinks Component Controller * * @package Joomla * @subpackage Weblinks * @since 1.5 */ class WeblinksController extends JController { /** * Method to show a weblinks view * * @access public * @since 1.5 */ function display() { // Set a default view if none exists if ( ! JRequest:: getCmd ( "view" ) ) { JRequest:: setVar ("view" , "categories" ) ; } //update the hit count for the weblink if (JRequest:: getCmd ("view" ) == "weblink" ) { $model =& $this -> getModel ("weblink" ) ; $model -> hit () ; } // View caching logic -- simple... are we logged in? $user = & JFactory:: getUser () ; $view = JRequest:: getVar ("view" ) ; $viewcache = JRequest:: getVar ("viewcache" , "1" , "POST" , "INT" ) ; if ($user -> get ("id" ) || ($view == "category" && $viewcache == 0 ) ) { parent:: display (false ) ; } else { parent:: display (true ) ; } } }

В этом методе мы устанавливаем вид (представление) по умолчанию: показ категорий, если другой вид не был передан как параметр строки запроса. Если требуемый вид — weblink, мы увеличиваем значение счетчика просмотра ссылки. Затем мы устанавливаем значение переменной вида и вызываем метод diplay нашего родительского класса JController .
Стоит обратить отдельное внимание на вызов метода getModel. Он загружает необходимую модель для компонента . В рассматриваемом примере, этот метод загрузит модель weblink, находущуюся здесь: …/components/com_weblinks/models/weblink.php .
Здесь условимся, что мы не запрашивали определенное представление, и поэтому наш вид будет установлен в categories.
Затем, мы открываем класс представления.

Класс представления (вида) (View Class)

Так как мы предполагаем, что хотим представление категорий, это — следующий файл, который будет выполнен: …/components/com_weblinks/views/categories/view.html.php

// Check to ensure this file is included in Joomla! defined ( "_JEXEC" ) or die ( "Restricted access" ) ; jimport( "joomla.application.component.view" ) ; /** * HTML View class for the WebLinks component * * @static * @package Joomla * @subpackage Weblinks * @since 1.0 */ class WeblinksViewCategories extends JView { function display( $tpl = null ) { global $mainframe ; $document =& JFactory:: getDocument () ; $categories =& $this -> get ("data" ) ; $total =& $this -> get ("total" ) ; $state =& $this -> get ("state" ) ; // Get the page/component configuration $params = & $mainframe -> getParams () ; $menus = & JSite:: getMenu () ; $menu = $menus -> getActive () ; // because the application sets a default page title, we need to get it // right from the menu item itself if (is_object ( $menu ) ) { $menu_params = new JParameter( $menu -> params ) ; if (! $menu_params -> get ( "page_title" ) ) { $params -> set ("page_title" , JText:: _( "Web Links" ) ) ; } } else { $params -> set ("page_title" , JText:: _( "Web Links" ) ) ; } $document -> setTitle ( $params -> get ( "page_title" ) ) ; // Set some defaults if not set for params $params -> def ("comp_description" , JText:: _("WEBLINKS_DESC" ) ) ; // Define image tag attributes if ($params -> get ("image" ) != - 1 ) { if ($params -> get ("image_align" ) != "" ) $attribs [ "align" ] = $params -> get ("image_align" ) ; else $attribs [ "align" ] = "" ; $attribs [ "hspace" ] = 6 ; // Use the static HTML library to build the image tag $image = JHTML:: _("image" , "images/stories/" . $params -> get ("image" ) , JText:: _("Web Links" ) , $attribs ) ; } for ($i = 0 ; $i < count ($categories ) ; $i ++ ) { $category =& $categories [ $i ] ; $category -> link = JRoute:: _("index.php?option=com_weblinks&view=category&id=" . $category -> slug ) ; // Prepare category description $category -> description = JHTML:: _("content.prepare" , $category -> description ) ; } $this -> assignRef ("image" , $image ) ; $this -> assignRef ("params" , $params ) ; $this -> assignRef ("categories" , $categories ) ; parent:: display ($tpl ) ; } } ?>

И снова, это — очень простой класс с одним методом display. БОльшая часть логики здесь является специфической для компонента ссылок, но если присмотреться можно найти функциональность используемую в большинстве классов представлений компонентов. В конце метода display этот класс вызывает родительский (JView) метод display , передавая название шаблона для отображения. Если название шаблона отображения не передается, используется шаблон «default».
И в последних, мы открываем класс шаблона.

Класс шаблона (Template Class)

Условимся что определенное имя шаблона не было передано, таким образом будет использован шаблон по умпочанию «default». В этом случае, следующий файл, который будет рассмотрен: …/components/com_weblinks/views/categories/tmpl/default.php
-> escape ($this -> params -> get ("page_title" ) ) ; ?>

params -> def ("image" , - 1 ) != - 1 ) || $this -> params -> def ("show_comp_description" , 1 ) ) : ?>
image ) ) : echo $this -> image ; endif ; echo $this -> params -> get ("comp_description" ) ; ?>
    categories as $category ) : ?>
  • escape ($category -> title ) ; ?> ( numlinks ; ?> )

Большая часть логики здесь специфична для выполняемого компонента. Также по коду видно, что в этом файле весь HTML, смешан с PHP – таковы его особенность о предназначение.

Другие файлы, использующиеся в компонентах

Несколько из других типов файла Вы могли бы найти в компонентах:

  • Helpers — в компонентах зачастую используется файл helper.php или каталог helpers со многими файлами. Эти файлы обычно содержат только общие функциональные возможности для компонента.
  • Assets — это, кажется, всеобъемлющая папка для других файлов, включаемых в компонент.
  • router.php — этот файл используется, при включенной настройке SEF URL, для трансляции URL в обоих направлениях (в человеко-понятный с псевдонимами и в системный вид Joomla с параметрами).
  • xml-файлы — они обычно определяют параметры и другую информацию о компоненте, и его обозрение. Они используются, например, при создании пунктов меню компонента.
  • index.html — хорошая практика иметь пустой index.html файл во всех ваших каталогах. Это такая пассивная мера безопасности.
  • css/images/js — папки, которые содержат различные файлы для внедрения дизайна и функциональности на стороне клиента (в браузере).

Продолжаю делиться с вами маленькими, но очень полезными скриптами для сайта, которыре помогают улучшить отношение поисковых систем к вашему сайту. На этот раз речь пойдет об грамотной перелинковке страниц.

Для начала создадим базу адресов страниц и возможные анкоры к какждому из них. В качестве базы будем использовать файл формата *.txt . Структура файла будет такой:

Адрес_страницы_1;анкор_1,анкор_2,анкор_3,...,анкор_n адрес_страницы_2;анкор_1,анкор_2,анкор_3,...,анкор_n адрес_страницы_3;анкор_1,анкор_2,анкор_3,...,анкор_n ... адрес_страницы_n;анкор_1,анкор_2,анкор_3,...,анкор_n

Как видите, дальнейшее использование скрипта возможно при любом количестве адресов страниц и анкоров к ним. Адрес страницы пишется без http://www.site.ru/, т.е. сразу от корня без первого слэша. Адрес раздляется от анкоров через точка с запятой, а анкоры между собой просто запятой. Можно сделать и написание полного адреса, просто лично мне так удобнее, а изменить под себя заполнение и выдачу результата вы можете и сами, думаю, вы интуитивно и сами разберетесь.

И так, база ссылок и анкоров к ним создана, далее я приведу пример кода PHP для непосредственного вывода ссылок для перелинковки на сайте:

".$tex2[$tex3].""; } ?>

Вставляем этот код в любое место на сайте, который выводит 5 случайных ссылок из базы и случайным анкором. Анкоры лучше разбавлять, а не писать только 1 к ссылке. При грамотной перелинковке на сайте вы незамедлительно увидите прирост трафика и улучшение других показателей сайта.

Жду ваши вопросы в комментариях к данному посту.

Дата публикации: 03 марта, 2014
    Отзывы и комментарии:

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

    Кирилл :
    Спасибо за замечание с копированием, только сейчас это увидел, постараюсь в ближайшее время исправить.

    Алексей Павлов :
    Ошибка в строчке $tex = explode(":",$sendlist[$count] Нужна точка с запятой, а не двоеточие. Я немного изменил код, сделал его понятнее: $anchor"; } ?>

    Matrk :
    Статья полностью бесполезна, т.к. на блоге стоит защита от копирования текста.

    Кирилл :
    Небольшой косяк есть в js, это да, нет времени поправить, но наверное кое-кто другой бесполезный, раз ума не хватает в таком случае исходный код страницы глянуть и взять от туда

    Matrk :
    Т.е. я должен еще по исходному коду лазить и чистить его от всякого мусора? Вы забавный.

    Кирилл :
    Получается я кому-то что-то должен? Я у вас что, деньги взял, стараешься тут, бесплатные советы даешь:))) Бесплатный сыр только в мышеловке, с возрастом поймете.

    Кирилл :
    Убрал косяк, пользуйтесь на здоровье.

    Андрей Копаев :
    1 - наверное лучше это делать с использованием базы данных mysql работать будет быстрее, добавлять проще 2 - не пойму какой смысл каждый раз генерить список ссылок? как это влияет на рост трафика? можно ли подгружать аяксом, т.е. это для людей или для ботов?

    www.сайт :
    Для продвижения, хотя, лично я не сторонник подобных манипуляций с ПС.

Слоеный пирог

Речь пойдет о компоненте com_weblinks и о html-разметке страницы Joomla. О том, как легко и просто создать каталог ссылок на сайте Joomla.

Эта CMS и создавалась для интерактивной работы с зарегистрированным пользователем, без прямого кодирования. Хотя тенденция развитя Joomla ведет к тому, чтобы отказаться от компонента com_weblinks вовсе как от бесполезного на сайте, и просто добавляющего лишний вес (более 100 кб - 90 файлов) и без того "тяжелой" системе. Но пока этот компонент еще присутствует в дистрибутиве и используется некоторыми программистами.

Видимая на экране страница сайта Joomla представляет из себя слоеный пирог, в построении которого одновременно участвует много блоков (соответственно много шаблонов). Здесь сказывается философия Joomla - крупноблочное сайтостроение. Для каждого блока обязательно есть свой шаблон (макет) html-разметки.

Основные блоки:

Шаблон главной страницы (шаблон_сайта/index.php), который своей html-разметкой определяет позиции для модулей и компонентов и выводит эти модули и компоненты.
- шаблон страницы
- шаблоны модулей
- шаблоны компонентов

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

Начинающему программисту бывает трудно понять, что первая строка в контентной части страницы выводится как заголовок страницы и редактируется на странице редактирования пункта меню, который указывает на эту страницу. Что вторая строка выводится из шаблона компонента com_content или com_weblinks . А строки в шаблонах как правило - это строковые переменные и их инициализация и локализация производится в языковых файлах, таких как language\ru-RU\ru-RU.mod_weblinks.ini и им подобных.

Иногда начинающего ставит в тупик: какой именно шаблон вывел ту или иную строку, которые на экранной странице выглядят как логичное продолжение одного и того-же повествования. Оказывается одна строка находится в одном шаблоне, другая во втором шаблоне, третья в третьем. А таблица со вкладками, расположенная ниже - это вывод из шаблона модуля mod_tabform.

Иногда шаблоны модулей называют макетами. Но это вопрос терминологии. Суть одна - это "одежда" для содержимого. Правильнее сказать - разметка. Так вот разметка одной экранной страницы находится в разных файлах каталогов Joomla.

Меню

Многие начинающие программисты Joomla часто не понимают, что пункты меню могут иметь разные типы. Иными словами - пункты меню могут ссылаться на объекты Joomla разных типов. Это могут быть разные объекты, такие как: компоненты (голосование, поиск, каталог ссылок и тд).

Выбор типа пункта меню:

Контакты (com_contact )
Список категорий контактов (categories )
Список контактов заданной категории (category )
Контакт (contact )
Избранные контакты (featured )

Материалы (com_content )
Архивные материалы (archive )
Материал (article)
Список всех категорий (categories )
Блог категории (blog category )
Список материалов категории (category)
Избранные материалы (featured )
Создать материал

Умный поиск (com_search )
Поиск (search )

Hello World! (com_helloworld )
Сообщение (helloworld )

Ленты новостей (com_newsfeeds )
Список всех категорий лент новостей (categories )
Список лент новостей в категории (category)
Лента новостей (newsfeed)

Поиск (com_search )
Форма поиска и список результатов поиска (search)

Менеджер пользователей (com_users )
Форма авторизации (login)
Профиль пользователя (profile)
Изменить профиль пользователя
Форма регистрации (registration)
Восстановление имени пользователя (remind)
Изменение пароля (reset)

Обёртка (com_wrapper )
Обёртка (wrapper)

Как видим, здесь все типы меню являются компонентами. Своим названием тип пункта меню фактически указывает на имя шаблона своего типа компонента. А шаблоны компонентов находятся в каталогах views (вид):

joomla\components\com_weblinks \views\categories
joomla\components\com_weblinks \views\category
joomla\components\com_weblinks \views\weblink
joomla\components\com_users\views\login

Как видим имена типов ссылок в меню и имена шаблонов в каталогах vews совпадают.

Разработчик имеет возможность создавать новые нестандартные шаблоны (макеты) для компонентов. Эти новые макеты так же будут отражаться в качестве новых типов меню в окне выбора типов меню. Это отдельная тема.

Демоконтент дистрибутива Joomla

Посмотрим как выстроена иерархия пунктов Меню "About Joomla" для отображения Компонента com_weblinks на установленном по умолчанию демо контенте (шаблон Beez2 - Default) Joomla.

Зайдем в админке на страницу редактирования компонента com_weblinks : Компоненты->Ссылки. Видим, что в демоконтенте, идущем с дистрибутивом создано пять категорий для компонента com_weblinks . Значит ссылки будут распределены по пяти категориям. Все созданные категории будут сохранены в таблице БД #_categories. В этой же таблице сохраняются категории и для других компонентов.

Sample Data-Weblinks
|-Park Links
|-Joomla! Specific Links
|-|-Other Resources
Uncategorised

В меню About Joomla (в редакторе меню) соответственно создана иерархия пунктов меню:

Иерархия пунктов меню:

Using Joomla! (тип: материал)
|-Using Extensions (тип: список всех категорий) :: список категорий в материалах
|-|-Components (тип: блог категории) :: категория в материалах
|-|-|-Weblinks Component (тип: материал)
|-|-|-|-Submit a Weblink (тип: создать ссылку) :: в компоненте Ссылки
|-|-|-|-Weblinks Single Category (тип: список ссылок в категории) :: в компоненте Ссылки
|-|-|-|-Weblinks Categories (тип: список категорий ссылок) :: в компоненте Ссылки

Видим, что некоторые пункты меню имеют типы: список категорий, список ссылок в категории и создать ссылку.
В "Список категорий ссылок" указывается верхняя категория, от которой будет показана иерархия.
В "Список ссылок в категории" указана категория, ссылки которой будут выведены.
В пункте "Создать ссылку" будет будет выведена форма, которую должен будет заполнить зарегистрированный пользователь.
Вот кстати как выглядит в редакторе ссылка на эту форму (в адресной строке ее вид изменится):

index.php?option=com_weblinks&view=form&layout=edit

Некоторые пункты в меню могут быть показаны только зарегистрированному пользователю! Например пункт меню с типом "Создать ссылку" будет виден только для зарегистрированных пользователей. Эта возможность создана специально для того, чтобы зарегистрированные пользователи могли создавать ссылки, которые будут размещены на странице.

Таким образом, компонент com_weblinks дает хороший способ интерактивного наполнения страницы интересными ссылками. При этом все ссылки, которые будут размещены на такой страничке, имеют редирект, то есть не будут индексироваться как внешние. Возможно, такие ссылки вы могли наблюдать на форумах. При наведении мышки на такую ссылку, вы увидите адрес своего сайта, и только после клика по ней произойдет перенаправление по указанному Вами адресу.

Возможность пользователю самому добавлять ссылки на внешние сайты - это основной плюс и смысл компонента com_weblinks , как и возможность добавления пользователем нового контента - статей, изображений, видео файлов и тд.

Дать возможность зарегистрированному пользователю, наделенному правами, наполнять сайт содержимым без прямого кодирования - основная философия CMS Joomla.

Uncategorised
Sample Data-Articles
|- Joomla!
|-|- Extensions
|-|-|- Components
|-|-|- Modules
|-|-|-|- Content Modules
|-|-|-|- User Modules
|-|-|-|- Display Modules
|-|-|-|- Utility Modules
|-|-|-|- Navigation Modules
|-|-|- Templates
|-|-|-|- Atomic
|-|-|-|- Beez 20
|-|-|-|- Beez 5
|-|-|- Languages
|-|-|- Plugins
|- Park Site
|-|- Park Blog
|-|- Photo Gallery
|-|-|- Animals
|-|-|- Scenery
|- Fruit Shop Site
|-|- Growers
|-|- Recipes

Кажется не слишком много категорий для материалов!
Посмотреть иерархию категорий в материалах можно так же при помощи запроса к таблице категорий в БД:

SELECT * FROM `#_categories` WHERE `extension` = "com_content"

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

Ниже перечислены программные файлы данного компонента. Все эти файлы находятся в папке administator/components/com_weblinks . В остальной части этой главы имена всех файлов компонента Weblinks упоминаются относительно данной начальной папки, если не указано иное. Большинство файлов организовано по шаблону MVC. В частности, все файлы представлений находятся в подпапке представлений, а все основные файлы моделей и контроллеров - в подпапках моделей и контроллеров соответственно. Их также дополняют установочные, конфигурационные и вспомогательные файлы.

Файлы административной части компонента Weblinks, кроме файлов index.html

  • controllers/weblink.php - Основной контроллер для редактирования Контроллер одиночной веб-ссылки
  • controllers/weblinks.php - Основной контроллер для составления Контроллер и отображения списка веб-ссылок на экране Weblinks Manager (Диспетчер веб-ссылок)
  • helpers/weblinks.php - Предоставляет различные методы, применяемые в контроллерах и представлениях
  • models/fields/ordering.php - Модель JformField отображения столбца упорядочения веб-ссылок на экране Weblinks Manager
  • models/forms/weblink.xml - XML-файл, используемый в классе Jform- Модель Field, для разметки формы с полями ввода и редактирования веб-ссылок на экране
  • models/weblink.php - Модель для экранной формы одиночной Модель веб-ссылки
  • models/weblinks.php - Модель для экранной формы диспетчера Модель веб-ссылок
  • sql/install.mysql.utf8.sql - SQL-файл для составления таблицы веб-ссылок во время установки
  • sql/uninstall.mysql.ut8.sql - SQL-файл для удаления таблицы вебссылок во время установки
  • tables/weblink.php - Предоставляет класс Модель
  • views/weblink/tmpl/edit_metadata.php - Файл исходной компоновки для редактирования метаданных веб-ссылки

Административная часть компонента Weblinks

  • views/weblink/tmpl/edit_params.php - Файл исходной компоновки для редактирования вариантов выбора одиночной веб-ссылки
  • views/weblink/tmpl/edit.php - Файл исходной компоновки для редактирования веб-ссылки
  • views/view.html.php - Класс основного представления для вывода одиночной веб-ссылки в формате HTML Файл исходной компоновки для диспетчера веб-ссылок
  • views/weblinks/view.html.php - Класс основного представления для вывода веб-ссылок в формате HTML непосредственно на экране Weblinks Manager
  • access.xml - XML-файл, предоставляющий список действий для системы списков контроля доступа (ACL)
  • config.xml - XML-файл, предоставляющий список вариантов выбора конфигурации компонента
  • controller.php - Класс основного контроллера
  • weblinks.php - Точка входа для запроса
  • weblinks.xml - XML-файл, используемый для управления процессом установки

Есть предложение в файле /includes/joomla.php в функции cleanText заменить строчку

$text = strip_tags ( $text ) ; $text = strip_tags ( $text , "" ) ;

Данный хак предназначен только для картинок, которые вставляются как нормальные изображения. Для изображений, вставляемых мамботом {mosimage} данный хак не сработает.

Как в компоненте com_weblinks сделать, чтобы выдавалась прямая ссылка

В weblinks.html.php надо заменить строку:

$link = sefRelToAbs( "index.php?option=com_weblinks&task=view&catid=" . $catid ."&id=" . $row ->id ) ; $link = $row ->url ;

Как сделать так, чтобы Joomla работала на двух хостах(доменах) одновременно. Т.е. например, в локальной сети по адресу 10.0.0.15 и из интернета сайт-фирмы.ру. При том, что оба адреса заведены на одну машину.

Во-первых вся соль проблемы заключается в том, что Joomla выдает все картинки и CSS-файлы (их пути в шаблоне) относительно своей переменной $mosConfig_live_site - базового адреса сайта, вводимого при установке. И если кто-то пытается обратиться к ней по-другому адресу, то ничего в логике ее работы не меняется - базовый адрес берется из файла кофигурации. Например если в конфигурации прописано, что Joomla находится на localhost, то обращение из локальной сети, пусть даже к правильно настроенному апачу слушающему адрес 192.168.0.1 ничего в ней не изменит - src у картинок все-равно будет начинаться с "localhost", который для других машин будет уже своим localhost"ом. Фокус решений для подобных случаев - это подмена переменной $mosConfig_live_site для запрашиваемого хоста, чтобы все функции могли выдавать правильные ссылки и уже водить пользователя либо по-одному, либо по-другому виртуальному сайту (выдавать правильные базовые пути к картинкам и базовые пути к адресам). Есть мамбот Auto live site который может это автоматизировать. Если он вас чем-то не устроит, то в принципе его можно повторить, для этого в configuration.php на месте определения $mosConfig_live_site надо написать ваш код. Нечто вроде:

if ($_SERVER [ "HTTP_HOST" ] =="хост1.ру" ) $mosConfig_live_site = "хост1.ру" ; else $mosConfig_live_site = "хост2.ру" ;

Необходимо обратить внимание, что в случае использования кэша надо так же иметь две различные директории кэширования для двух хостов, потому что в кэше могут пересечься ссылки на разные хосты, и тогда пользователь не из той сети вообще никуда не попадет. За кэш отвечает переменная $mosConfig_cachepath.

Как сделать так, чтобы на одной странице одновременно отображались два компонента

Сразу скажу - не все так просто. Компонент он ведь не модуль. Поэтому во-первых стоит поискать альтернативу, т.е. наверняка к популярному компоненту идут модули, которые могут повторить его функционал. Если ничего такого нет тогда этот вариант. Можно сделать как модуль, а можно по идее и в шаблон вставить. Идея такова - вызов компонента через index2.php (что и почему - читаем фак полностью). Т.е. можно сделать iframe с src="index2.php?option=com_компонент&no_html=1" на нужном вам месте вставки второго компонента. И он там будет отображен. Другое дело, что полностью обеспечить фукционал вряд ли удастся. Но тем не менее это выход.

Либо использовать конструкцию: mosLoadComponent("com_mycomp" ) ;

Но, если компонент будет выполнен таким образом, то надо понимать, что он знать не знает о ваших манипуляциях и будет работать согласно своим $option и $task.

Как увеличить длину заголовка в статье

Надо выполнить две следующие команды в phpMyAdmin (там есть специальная страница для выполнения SQL-запросов), только надо заменить ###_ на свой реальный префикс таблиц. Максимально возможное число - 255. В примере использовано 200.

ALTER TABLE `###_content` CHANGE `title_alias` `title_alias` VARCHAR(200) NOT NULL; ALTER TABLE `###_content` CHANGE `title` `title` VARCHAR(200) NOT NULL;

Как включить в RSS-фид полные тексты новостей, а не только их заголовки

Для этого в файле /components/com_rss/rss.php, надо заменить

$item_description = $row ->introtext ; $item_description = $row ->fulltext ;

Как можно сделать два сайта на Joomla, использующие одну и ту же базу данных или использующие одни и те же файлы

Что касается использования одной БД - надо прописать в configuration.php для двух движков одну базу, но надо понимать что вы делаете. Ибо ведение сессий для пользователей в таком случае будет весьма проблематично, потому что домены разные. Т.е. записи о входе в таблице #__sessions будут пересекаться (могут пересекаться).

Если хочется использовать одни и те же файлы, не копируя большой дистрибутив, то в принципе можно при помощи команды "ln -s" в линуксе создать символические ссылки на уже существующие файлы и не копировать их для нового сайта.

Как создать виртуальную страницу, доступную по определенном адресу в общем дизайне Joomla (http:/ /сайт.ру/super_page)

  • Первый способ - использовать какой-либо SEF-компонент, в котором для статичной страницы прописать нужный виртуальный путь. Тут есть минус - этот компонент начнет переделывать все остальные ссылки (и вообще эти компоненты очень прожорливые и требуют много ресурсов для работы).
  • Создать алиас такой страницы при помощи mod_rewrite и .htaccess . Для этого надо:
    • Создать статичную страницу с нужным вам текстом, узнать ее ID и адрес (не обязательно создавать такую страницу, она уже может существовать и вообще это просто какой-либо компонент, не обязательно com_content)
    • Придумать алиас, пускай это будет "super_puper "
    • Открыть.htaccess и перед строкой "RewriteCond %{REQUEST_FILENAME} !-f" написать:
RewriteRule ^(super_puper) index.php?option=com_content&task=view&id=12 RewriteCond %{REQUEST_FILENAME} !-f
    • И теперь, при условии что Joomla стоит по адресу сайт.ру, при открытии ссылки http:/ /сайт.ру/super_puper будет открываться нужная статическая страничка с вашей информацией. Сама ссылка "index.php?option=com_content&task=view&id=12" может быть любой которая вам нужна, главное, чтобы ссылка не была абсолютной (т.е. с http:/ /...) а относительной (должна начинаться с index.php?...)

Как запретить кэширование для определенной статьи

Это может понадобиться, если вы при помощи мамбота rd_addphp вставляете какие-либо скрипты, которые должны каждый раз генерировать случайные числа или случайный текст, независимо от системы кэширования Joomla. Для отключения кэширования определенной стать надо узнать ее ID (в админке, при редактировании взгляните на адресную строку, там будет указано нечто такое "...&id=123..."). Так вот 123 - и будет нашим ID статьи. Нужно, в файле /components/com_content/content.php приблизительно на строке 1600 заменить

$cache ->call ( "HTML_content::show" , $row , $params , $access , $page ) ; if ($row ->id !="123" ) $cache ->call ( "HTML_content::show" , $row , $params , $access , $page ) ; else HTML_content::show ($row , $params , $access , $page ) ;

Где 123 - нужный вам ID статьи.

Я поставил много компонентов, а в списке компонентов в админ-меню показывается урезанное их количество, а дальше написано "More components...". Как вывести все компоненты.

Надо в файле /administrator/modules/mod_fullmenu.php строку

$topLevelLimit = 19 ;

заменить на

$topLevelLimit = 199 ;

Как установить копию компонента

Надо сказать, что задача на редкость сложная. Если вы не разбираетесь в том как устроен компонент, то не стоит даже и пытаться. Для тех кто все-так захочет отметим основные моменты:

  • В XML-файле переименовать имя компонента в тэге name
  • Далее надо переименовать используемые таблицы (во-первых в XML-файле, а во-вторых во всех файлах компонента, везде где используется объект базы данных $database и метод setQuery )
  • Все пути в компонентах тоже переименовать. Пути могут быть использованы в ссылках на самого же себя или в именах включаемых файлов. Чаще всего это сводится к поиску подстроки com_имякомпонента и замене ее на новую.

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

Как сделать так, чтобы на одной позиции случайным образом показывался один из модулей, назначенных на нее

  • Вариант 1 - хак фукнции mosLoadModules. В шаблоне месте где необходимо вывести один из N модулей пишем (обратите внимание на третий аргумент):
mosLoadModules ( "позиция" , настройка_ показа,true ) ;

И немного поправляем саму вышеозначенную фукнцию:

function mosLoadModules( $position ="left" , $style =0 , $show_random = false ) { ... $allModules =& initModules() ; if (isset ( $GLOBALS [ "_MOS_MODULES" ] [ $position ] ) ) { $modules = $GLOBALS [ "_MOS_MODULES" ] [ $position ] ; } else { $modules = array () ; } //дописываем тут if ($show_random && sizeof ($modules ) >0 ) { $tmp = $modules [ rand (0 ,sizeof ($modules ) -1 ) ] ; $modules = array ($tmp ) ; } //конец дописки if (count ( $modules ) < 1 ) { $style = 0 ; }

Мы дописали в нее третий аргумент (который и используется в шаблоне, там где мы написали true) и модифицировали код.

  • Вариант два - более безболезненный, мы модифицируем только шаблон. Но более трудозатратный - нам надо создать несколько позиций. Сначала создаем несколько новый позиций модулей, например new1 ... new10. Сохраняем. В нужном месте шаблона, перед вызовом функции mosLoadModules дописываем нужный код:
$rand_num = rand (1 ,10 ) ;//от 1 до 10 - как в имени позиций mosLoadModules ( "new" .$rand_num , настройка_ показа) ;

Я считаю, что переименовав папку /adminisrator/ я сделаю свой сайт безопаснее

Стандартно такой возможности не предусмотрено. Но фактически можно, организовав поиск по файлам джумлы сделать замену любого вхождения такого слова на ваше - секретное. Иногда потом возможно будут выскакивать ошибки о не возможности доступа к файлам, но зная файл и номер строки их можно будет исправить. Поэтому проблема в принципе разрешима.