Хакі та доповнення. Листковий пиріг та com_weblinks Joomla Синкліт weblinks php

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

Компонент Посилання (Web Links) забезпечує простий спосіб організації контенту, що включає посилання інші сайти. Кожен елемент складається з URL-адреси (посилання) та необов'язкового тексту. Окремі посилання об'єднуються у категорії. Як і матеріали, посилання можуть створюватися людьми, які додають матеріали на сайт, редагують їх чи публікують, а не лише адміністраторами, які мають доступ до панелі керування.

Як і матеріали, посилання можна редагувати у клієнтській частині веб-сайту. Користувачі, які мають право редагувати посилання, бачитимуть значок Змінити (Edit), переглядаючи сторінки сайту. За замовчуванням на редагування посилань поширюються самі правила, як і на редагування матеріалів, за винятком того, що права «редагувати власні» (edit own) для посилань не існує. Ключова відмінність посилань від матеріалів у тому, що функції контролю доступу застосовуються не так на рівні окремих посилань, але в рівні компонента загалом і категорій, яких віднесені конкретні посилання (у пізніших релізах Joomla! 3 ця схема може змінитися).

Як і для створення матеріалів та інших ключових компонентів, щоб створити нове посилання в адміністративній частині сайту, потрібно клацнути на значку Створити (New) на панелі інструментів. У формі, що відкрилася, введіть заголовок, саме посилання і опис (це поле заповнювати не обов'язково). Ви також можете вибрати, що буде відбуватися після клацання на посиланні: наприклад, сторінка відкриватиметься в тій же вкладці або вікні браузера, в новій вкладці або вікні, у спливаючому модальному або немодальному вікні, в якому будуть або не будуть навігаційні елементи управління браузера . Ці настройки знаходяться на вкладці або в списку Основні параметри (Basic Options). Поекспериментуйте з різними варіантами. У міру того як ви набиратиметеся досвіду, ви можете знайти застосування кожному з варіантів, хоча найчастіше використовується перехід за посиланням в тому ж вікні браузера.

Якщо Ваш комп'ютер зламався або Ви незадоволені його роботою та хочете зробити ремонт комп'ютера – наші спеціалісти комп'ютерного сервісу допоможуть Вам.

У Менеджері меню підтримується створення пунктів меню для трьох типів макетів подання посилань:

  • Список посилань у категорії (List Web Links in a Category).Цей макет призначений для відображення списку всіх посилань у вибраній категорії; для кожного посилання виводиться відповідний опис. Клацніть на посилання, щоб перейти до ресурсу, на який вказує посилання.
  • Список категорій посилань (List All Web Links Categories).У цьому макеті виводиться список усіх категорій, що існують у компоненті Посилання (Web Links), право на перегляд яких є у користувача. Кожен заголовок є посиланням на макет типу «список вмісту категорії» (Category List), де перераховуються всі підкатегорії у вибраній категорії.
  • Створити посилання (Submit a Web Link).Цей макет містить форму створення нового посилання.

Немає способу безпосередньо вивести на сторінку одне посилання з відповідним описом. Однак того ж ефекту можна досягти, створивши категорію з єдиним посиланням та використовуючи макет «список вмісту категорії». Якщо вам потрібно в меню посилання, що веде безпосередньо на інший сайт, для цього слід вибрати тип пункту меню Зовнішній URL (External Link). Для посилань, як і для компонентів, параметри за замовчуванням та загальні параметри налаштовуються на екрані, який відкривається натисканням кнопки Налаштування (Options) в адміністративній частині сайту. Ви побачите кілька вкладок, які містять стандартні налаштування для всіх посилань на веб-сайті. Ці налаштування, однак, можуть бути перевизначені для кожного конкретного посилання.

Компонент Посилання (Web Links) – це гарне рішення для керування деякими специфічними типами контенту та його відображення. Наприклад, його часто використовують для визначення посилань на зовнішні джерела інформації з певної теми. Крім того, за його допомогою зручно виводити каталоги, наприклад, каталог виробників продуктів або інших людей або компаній, які можуть навіть додатково платити за можливість потрапити до цього списку. Також можна створити сторінку з посиланнями на веб-сайти учасників вашого проекту або рекомендовані блоги. Ще один варіант: використовувати посилання на обрані статті про вашу організацію або за цікавою для вас темою на інших сайтах. Цей компонент можна використовувати навіть для керування посиланнями на документи та інші розділи вашого веб-сайту.

Є пропозиція у файлі /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 ) ;< 1 ) { $style = 0 ; }

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

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

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

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

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

Для початку створимо базу адрес сторінок і можливі анкори до кожного з них. Як база будемо використовувати файл формату *.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.сайт:
    Для просування, хоча, особисто я не прихильник подібних маніпуляцій із ПС.



Подібні публікації