Заснування weblinks php. Листковий пиріг і com_weblinks Joomla. Як включити в RSS-фід повні тексти новин, а не лише їх заголовки

18.05.2020 Новини

Точка входу до 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 hit count for 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 цей файл included в 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 — папки, які містять різноманітні файли для впровадження дизайну та функціональності на стороні клієнта (у браузері).

Є пропозиція у файлі /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/ я зроблю свій сайт безпечнішим

Стандартно такої можливості не передбачено. Але фактично можна, організувавши пошук файлів джумли зробити заміну будь-якого входження такого слова на ваше - секретне. Іноді потім можливо вискакуватимуть помилки про неможливість доступу до файлів, але знаючи файл і номер рядка їх можна буде виправити. Тому проблема в принципі можна розв'язати.

Розглянемо компоненти з того, як базовий компонент 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-файл, який використовується для керування процесом встановлення

Листковий пиріг

Йтиметься про компонент 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.mod_weblinks.ini та їм подібних.

Іноді початківця ставить у глухий кут: який саме шаблон вивів той чи інший рядок, які на екранній сторінці виглядають як логічне продовження однієї і тієї ж розповіді. Виявляється один рядок знаходиться в одному шаблоні, інший у другому шаблоні, третій у третьому. А таблиця із вкладками, розташована нижче - це висновок із шаблону модуля mod_tabform.

Іноді шаблони модулів називають макетами. Але це питання термінології. Суть одна – це "одяг" для вмісту. Правильніше сказати – розмітка. Так ось розмітка однієї екранної сторінки знаходиться в різних файлахкаталогів Joomla.

Меню

Багато програмістів-початківців Joomla часто не розуміють, що пункти меню можуть мати різні типи. Іншими словами – пункти меню можуть посилатися на об'єкти Joomla різних типів. Це можуть бути різні об'єкти, такі як: компоненти (голосування, пошук, каталог посилань тощо).

Вибір типу пункту меню:

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

Матеріали (com_content)
Архівні матеріали (archive)
Матеріал (article)
Список усіх категорій ( categories)
Блог категорії (blog 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 (в редакторі меню) відповідно створено ієрархію пунктів меню:

Ієрархія пунктів меню:

За допомогою 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"

Продовжую ділитися з вами маленькими, але дуже корисними скриптами для сайту, які допомагають покращити ставлення пошукових системдо вашого сайту. Цього разу мова піде про грамотну перелінковку сторінок.

Для початку створимо базу адрес сторінок і можливі анкори до кожного з них. Як база будемо використовувати файл формату *.txt. Структура файлу буде такою:

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

Як бачите, подальше використання скрипту можливе за будь-якої кількості адрес сторінок і анкорів до них. Адреса сторінки пишеться без http://www.site.ru/, тобто. відразу від кореня без першого слеша. Адреса розлучається від анкорів через крапку з комою, а анкори між собою просто комою. Можна зробити і написання повної адреси, просто особисто мені так зручніше, а змінити під себе заповнення та видачу результату ви можете і самі, гадаю, ви інтуїтивно і самі розберетеся.

І так, база посилань та анкорів до них створена, далі я наведу приклад PHP коду для безпосереднього виведення посилань для перелінкування на сайті:

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

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

Чекаю на ваші запитання в коментарях до цієї посади.

Дата публікації: 03 березня, 2014
    Відгуки та коментарі:

    Дмитро:
    Дякую за скрипт, буду впроваджувати. З вихідного кодуз сайту неможливо скопіювати, копіюється лише маленькими уривками, було б зручніше цілком.

    Кирило:
    Дякую за зауваження з копіюванням, тільки зараз це побачив, намагатимусь найближчим часом виправити.

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

    Matrk:
    Стаття цілком марна, т.к. на блозі стоїть захист від копіювання тексту.

    Кирило:
    Невеликий одвірок є в js, це так, немає часу поправити, але напевно дехто інший марний, якщо розуму не вистачає в такому разі вихідний код сторінки глянути і взяти від туди

    Matrk:
    Тобто. я маю ще за вихідним кодом лазити і чистити його від всякого сміття? Ви кумедний.

    Кирило:
    Виходить я комусь щось винен? Я у вас що, гроші взяв, стараєшся тут, безкоштовні поради даєш:))) Безкоштовний сир тільки в мишоловці, з віком зрозумієте.

    Кирило:
    Прибрав одвірок, користуйтеся на здоров'я.

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

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