FAQ по программированию для Joomla

36
0
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...
Время на прочтение: : 5 мин

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

global $my;
//$my->username - логин
//$my->name - имя, указанное при регистрации
//$my->id - идентификатор юзера, из таблицы #__users
var_dump($my);
 

Как мне из своего компонента поменять title у страницы

 
global $mainframe;
$mainframe->setPageTitle("Hello")
 

Как мне из своего компонента поменять description и keywords

 
global $mainframe;
$mainframe->appendMetaTag( 'description', 'Описание' );
$mainframe->appendMetaTag( 'keywords', 'Ключевые слова' );
 

Как обращаться к базе данных, читать и записывать данные

Прочтите статью Работа с базой данных в Joomla.

Где задаются пункты меню для админки компонента

В XML-файле компонента, в тэге «<menu>».

Зачем нужен префикс «#__» в именах таблиц

Это псевдо префикс (там два подчеркивания). В методе setQuery() он будет заменен на реальный префикс, записанный в конфиге.

Как хранить ассоциированную с пользователем информацию

В Joomla нет встроенного механизма, поэтому надо использовать сессии.

Как редактировать объекты — строки таблицы и манипулировать ими

Можно использовать класс database и прямо в нем делать запросы типа INSERT или UPDATE, а можно использовать встроенный механизм — класс mosDBTable и его методы bind(), check() и store(). Более подробно об этом написано в статье Использование mosDBTable

Как сделать captcha в моем компоненте

Есть вариант с securityImages, но они тяжелые очень. Поэтому проще всего взять класс генерации рисунков на captcha.ru.

Я генерирую картинку и хочу вывести ее пользователю, но Joomla выводит свой код, а я хочу только изображение

Для этого все запросы фронта переправляйте на URL

/index2.php?option=com_компонент&task=xxx&no_html=1

. Для админки это index3.php. Тут будет выведен только ваш компонент, и ничего более. Вы даже можете выводить тут свои заголовки функцией header.

Возникает ошибка Fatal error: Cannot redeclare functionName() (previously declared in modules\mod_XXXX.php:7) in modules\mod_XXXX.php on line ZZ

Т.е. вы делаете модуль и совершаете одну частую ошибку — объявляете функцию внутри файла mod_xxxx.php. Все дело в том, что если модуль будет скопирован на другую позицию, то этот файл будет включен снова — и произойдет попытка снова объявить эту функцию. Вариантов решения два:

  • Объявлять функцию внутри блока
 
if(!function_exists('functionName')) {
 
    function functionName() {...}
}
 
  • Вынести функцию в отдельный файл и включать его при помощи require_once. А этот файл копировать при установке модуля рядом с ним (надо добавить строчку в xml-файл)

Как построить select-список из данных, хранящихся в БД

Рассмотрен пример абстрактной таблицы #__classes. Никакого мануала, просто пример использования. Выдрано из контекста левой задачи.

$database->setQuery("SELECT id,name FROM #__classes ORDER BY id");
$classes = $database->loadObjectList();

в форме надо выдать селект-список

mosHTML::selectLIst($classes,'idclass','class="inputbox" size="1"', 'id','name',$по_умолчанию);

поясняю параметры:

  1. массив с классами
  2. имя селекта (уйдет в _POST)
  3. доп штуки, обычно пишут это
  4. имя поля объектов, в массиве $classes который сохраняется в <option value=’сюда’></value>
  5. имя поля объектов, из которых состоит входной массив — <option …>имя</value>
  6. значение для 4 по умолчанию

где $classes — массив из $class->id — айдишник записи, $class->name — имя класса (такие поля находятся в БД)

Как в админке заблокировать меню, при работе своего компонента

Параметр называется hidemainmenu. Если 0 — показать меню, 1 — скрыть меню. Достаточно в url добавить параметр &hidemainmenu=1 что бы меню было не доступно.

Есть ли шаблонизатор в Joomla

Нет. Точнее есть — patTemplate, но им пользуются только разработчики, да и то только в теории. Странный он и не интересный. Если вы раньше пользовались Smarty или XTemplate — продолжайте их использовать.

Как создать js-окно с подтверждением перехода по ссылке (например удаления объекта)

<a href='#' onClick="javascript:if(confirm("Вы уверены?")) document.location='xxx.yyy.zzz';" >

Какая функция используется для получения входных данных

$param = mosGetParam($_REQUEST,'имя','по_умолчанию')

Первый параметр — входной массив, второй — имя переменной, а третий — если ее там нет — то будет взято это значение. Помните, что после этой функции данные уже будут безопасными для вставки в базу данных (слэши будут добавлены, SQL-injection не пройдет). Если хочется записать их в файл — надо сделать:

$param = stripslashes($param);

Обратите внимание на особенность этой функции. Если вы хотите получить строковый параметр, то «значение_по_умолчанию» должно быть пустой строкой, а если числовой, то нулем. Если вы захотите например сделать так:

 
$task = mosGetParam($_REQUEST,'task',0);
 

То даже если в адресе передано index.php?option=com_xxx&task=zzz, то строки zzz вы в переменной не увидите. Надо вместо нуля использовать пустую строку:

 
$task = mosGetParam($_REQUEST,'task',"");
 

Если вы получаете числовой параметр (например ID), очень желательно делать приведение к целому:

 
$abc = (int)mosGetParam($_REQUEST,'abc',0);
 

Но это не снимает с вас ответственности в борьбе с SQL-Injection

Какие еще системные переменные можно использовать

  • $mosPageNav — генерация постраничной навигации

+ в любом случае надо прочитать статью API функции Joomla.

Чем отличается работа в режиме стандартного SEF от обычного режима

Этот вопрос был создан только для того, что бы рассказать об одной не очевидной вещи — в режиме стандартного SEF нельзя пользоваться переменной

$_SERVER['REQUEST_URI']

Дело в том, что в внутри компонента данный элемент массива уже не будет совпадать с тем, что содержится в адресной строке.

Когда нужно использовать константу _VALID_MOS

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

Комментарии (0)
Войдите чтобы оставить комментарий

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Содержание