Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Samouchitel_po_razrabotke_rasshireny_dlya_Jooml....docx
Скачиваний:
3
Добавлен:
10.11.2018
Размер:
2.53 Mб
Скачать

Создание формы Обзора

После создания таблицы БД, нам необходим дружественный интерфейс для добавления Обзоров в нее. Для начала, давайте создадим форму для ввода данных Обзора. Также как и с ПИ, мы отделяем логику от отображения. PHP-код для настройки формы будет в admin.reviews.php, а admin.reviews.html.php будет содержать инструкции HTML. Откройте admin.reviews.php и замените содержимое на следующий код:

<?php

defined( '_JEXEC' ) or die( 'Restricted access' );

require_once( JApplicationHelper::getPath( 'admin_html' ) );

JTable::addIncludePath(JPATH_COMPONENT.DS.'tables');

switch($task)

{

case 'add':

editReview( $option );

break;

}

function editReview( $option )

{

$row =& JTable::getInstance('Review', 'Table');

$lists = array();

$reservations = array(

'0' => array('value' => 'None Taken',

'text' => 'None Taken'),

'1' => array('value' => 'Accepted',

'text' => 'Accepted'),

'2' => array('value' => 'Suggested',

'text' => 'Suggested'),

'3' => array('value' => 'Required',

'text' => 'Required'),

);

$lists['reservations'] = JHTML::_('select.genericList',

$reservations, 'reservations', 'class="inputbox" '. '', 'value',

'text', $row->reservations );

$lists['smoking'] = JHTML::_('select.booleanlist', 'smoking',

'class="inputbox"', $row->smoking);

$lists['published'] = JHTML::_('select.booleanlist', 'published',

'class="inputbox"', $row->published);

HTML_reviews::editReview($row, $lists, $option);

}

?>

После проверки, что мы находимся в Joomla, используем require_once(JApplicationHelper::getPath('admin_html')) для подключения admin.reviews.html.php. Функция GetPath() принимает определенные строки (такие, как admin_html, front_html, и класс) и возвращает абсолютный путь к соответствующим файлам Компонента. Хотя мы не указали имя Компонента в этой строке кода, будет подключен соответствующий (правильный) файл, даже если мы изменим название Компонента и HTML-файла. Использование require_once() гарантирует подключение файла только один раз.

Хотя мы сразу же и не будем работать с базой данных подключаем наш table-класс таблицы с помощью JTable функции addIncludePath(). Эта функция автоматически включает все классы которые мы определили в файлах в каталоге tables. Имя файла и путь созданы для кросс-платформенной совместимости. В JPATH_COMPONENT содержится абсолютный путь к ИА. Константа DS разделитель каталогов, конретный для операционной системы. Оператор switch() проверяет переменную $task и выбирает соответствующую функцию для запуска в зависимости от значения. Наконец, функция editReview() готовит несколько элементов HTML до передачи их вместе с нашей функцией отображения HTML_reviews::editReview().

Теперь создайте admin.reviews.html.php файл и добавьте в него следующий код:

<?php

defined( '_JEXEC' ) or die( 'Restricted access' );

class HTML_reviews

{

function editReview( $row, $lists, $option )

{

$editor =& JFactory::getEditor();

JHTML::_('behavior.calendar');

?>

<form action="index.php" method="post"

name="adminForm" id="adminForm">

<fieldset class="adminform">

<legend>Details</legend>

<table class="admintable">

<tr>

<td width="100" align="right" class="key">

Name:

</td>

<td>

<input class="text_area" type="text" name="name"

id="name" size="50" maxlength="250"

value="<?php echo $row->name;?>" />

</td>

</tr>

<tr>

<td width="100" align="right" class="key">

Address:

</td>

<td>

<input class="text_area" type="text" name="address"

id="address" size="50" maxlength="250"

value="<?php echo $row->address;?>" />

</td>

</tr>

<tr>

<td width="100" align="right" class="key">

Reservations:

</td>

<td>

<?php

echo $lists['reservations'];

?>

</td>

</tr>

<tr>

<td width="100" align="right" class="key">

Quicktake:

</td>

<td>

<?php

echo $editor->display( 'quicktake', $row->quicktake ,

'100%', '150', '40', '5' ) ;

?>

</td>

</tr>

<tr>

<td width="100" align="right" class="key">

Review:

</td>

<td>

<?php

echo $editor->display( 'review', $row->review ,

'100%', '250', '40', '10' ) ;

?>

</td>

</tr>

<tr>

<td width="100" align="right" class="key">

Notes:

</td>

<td>

<textarea class="text_area" cols="20" rows="4"

name="notes" id="notes" style="width:500px"><?php echo

$row->notes; ?></textarea>

</td>

</tr>

<tr>

<td width="100" align="right" class="key">

Smoking:

</td>

<td>

<?php

echo $lists['smoking'];

?>

</td>

</tr>

<tr>

<td width="100" align="right" class="key">

Credit Cards:

</td>

<td>

<input class="text_area" type="text" name="credit_cards"

id="credit_cards" size="50" maxlength="250"

value="<?php echo $row->credit_cards;?>" />

</td>

</tr>

<tr>

<td width="100" align="right" class="key">

Cuisine:

</td>

<td>

<input class="text_area" type="text" name="cuisine"

id="cuisine" size="31" maxlength="31"

value="<?php echo $row->cuisine;?>" />

</td>

</tr>

<tr>

<td width="100" align="right" class="key">

Average Dinner Price:

</td>

<td>

$<input class="text_area" type="text"

name="avg_dinner_price"

id="avg_dinner_price" size="5" maxlength="3"

value="<?php echo $row->avg_dinner_price;?>" />

</td>

</tr>

<tr>

<td width="100" align="right" class="key">

Review Date:

</td>

<td>

<input class="inputbox" type="text" name="review_date"

id="review_date" size="25" maxlength="19"

value="<?php echo $row->review_date; ?>" />

<input type="reset" class="button" value="..."

onclick="return showCalendar('review_date',

'y-mm-dd');" />

</td>

</tr>

<tr>

<td width="100" align="right" class="key">

Published:

</td>

<td>

<?php

echo $lists['published'];

?>

</td>

</tr>

</table>

</fieldset>

<input type="hidden" name="id"

value="<?php echo $row->id; ?>" />

<input type="hidden" name="option"

value="<?php echo $option;?>" />

<input type="hidden" name="task"

value="" />

</form>

<?php

}

}

?>

Введите в браузере http://localhost/joomla/administrator/index.php?option=com_reviews&task=add и вы должны увидеть такой экран

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

Что делает JTML::_()? Joomla! включает в себя многие поколения HTML функций, которые могут быть использованы для автоматизации создания элементов, таких как раскрывающиеся списки и чекбоксы. Для скорости исполнения, эти функции загружаются в память только по мере их необходимости. Это достигается с помощью функции _ (), которая принимает имя функции в качестве первого параметра и передает остальные параметры (если таковые имеются) в нужную функцию. Функции сгруппированы по типу, о чем свидетельствует первая часть названия (перед точкой) переходящая в первый параметр функции _ ().

Сначала мы вставляем в объект HTML редактор администратора с помощью функции JFactory::getEditor();. Далее мы также используем JHTML::_('behavior.calendar "), чтобы добавить JavaScript и CSS в header. Они необходимы для всплывающего календаря в поле Review Date:

class HTML_reviews

{

function editReview( $row, $lists, $option )

{

$editor =& JFactory::getEditor();

JHTML::_('behavior.calendar');

Функция объекта редактора display() возвращает HTML для выбранного текстового редактора. Если текстовый редактор не требуется, это будет возвращено поле <textarea>.

<td>

<?php

echo $editor->display( 'quicktake', $row->quicktake ,

'100%', '150', '40', '5' ) ;

?>

</td>

Функция display() принимает следующие элементы: form variable, name, value, width, height, columns и rows. Последние два - размеры для <textarea>, в случае если администратор решил не использовать редактор HTML

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]