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

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...
Опубликовано:
Обновлено:
166 просмотров
0
Время на прочтение: 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 не будет опубликован. Обязательные поля помечены *

Содержание