Часто на нашем форуме пробегает вопрос - как сделать каталог с теми или иными полями. Рассмотрим в данном примере галерею от Datso. Все необходимое получается путем добавления некоторых нужных нам дополнительных полей для каждого изображения. Что мы хотим - добавить для каждого изображения параметр "место съемки"
Итак что нам требуется:
1 - новое поле в базе данных
2 - добавить поле в административной панели для редактирования параметра
3 - вывести его на экран для пользователя при просмотре среднего эскиза
добавление поля в базу данных1 - добавляем поле в БД, назовем его к примеру - place, добавим сразу после поля "название картинки" (imgtitle)
ALTER TABLE `meb_datsogallery` ADD `place` VARCHAR( 250 ) NOT NULL AFTER `imgtitle` ;
Добавить нужные переменные в административной части2 - открываем файл
globals.datsogallery.php, находим блок получения переменных из запроса (примерно с 71 строки) и добавляем строку
$place = mosGetParam($_REQUEST, 'place', '');
3 - открываем
class.datsogallery.php, находим блок class mosdatsogallery extends mosDBTable { }
и добавляем строку
4 - открываем файл
admin.datsogallery.php и находим строку примерно 151
$database->setQuery( "insert into #__datsogallery(....)
и добавляем в него по аналогии поле place и переменную $place, должно получиться что то вроде:
$database->setQuery( "insert into #__datsogallery(id,catid,imgtitle,place,imgauthor,imgtext,imgdate,imgcounter,ordering,imgvotes,imgvotesum,published,imgfilename,imgthumbname,imgoriginalname,checked_out,owner,approved) VALUES (NULL,'$catid','$imgtitle','$place','$imgauthor','$imgtext','$imgdate','0','$ordering','0','0','1','med_$org_screenshot_name','tn_$org_screenshot_name','$org_screenshot_name','0','$my->username',1)" );
добавить дополнительное поле для редактирования в административную панель5 - открываем файл
admin.datsogallery.html.php, находим блок вывода формы редактирования изображения, примерно с 278 строки и по аналогии добавляем новую строку:
<tr>
<td width="20%"><b>Производитель (бренд):</b></td>
<td width="80%">
<input class="inputbox" type="text" name="place" size="39" maxlength="100" value="<?php echo htmlspecialchars( $row->place, ENT_QUOTES );?>" /></td>
</tr>
Добавить новое поле в фронтенд (то есть окно для пользователя при просмотре среднего эскиза)6 - файл
sub_viewdetails.php, находим блок $database->setQuery в строке 70 и добавляем строку
чуть ниже есть собственно массив list, в него добавляем через запятую новую переменную из запроса $place
Дальше находим вывод всего добра на экран, примерно в строке 263 (начинается таблица), условий у нас никаких нет, просто добавляем результат выборки таким же образом:
echo "<tr class='sectiontableentry2'><td width='30%' valign='top'><strong>Место где был сделан снимок:</strong></td>\n
<td width='70%' valign='top'>".$place."</td>\n</tr>\n"
Вот в принципе и все, первое поле для нашего а-ля каталога сделано, таким же образом можно добавить нужное количество полей для описания изображения. Номера строк указаны для версии 1.4.1.
При наличии желания можно прикрутить к компоненту расширенный поиск по новым полям, но это уже по желанию
По теме поднятой
Juliett сделаю добавление:
Если необходимо сделать поле с датой (про формат поля в БД я сейчас не говорю) и кнопочку для показа календарика, то необходимо добавить вызов скриптов и стиля в файл
admin.datsogallery.html.php перед новым полем, и добавить кнопку для календарика, то есть наш хак данного файла выглядит так:
<tr>
<td width="20%"><b>Производитель (бренд):</b></td>
<td width="80%">
<link rel="stylesheet" type="text/css" media="all" href="../includes/js/calendar/calendar-mos.css" title="green" />
<script type="text/javascript" src="../includes/js/calendar/calendar.js"></script>
<script type="text/javascript" src="../includes/js/calendar/lang/calendar-en.js"></script>
<input class="inputbox" type="text" name="place" size="39" maxlength="100" value="<?php echo $row->place; ?>" />
<input type="reset" class="button" value="..." onClick="return showCalendar('place', 'y-mm-dd');"></td>
</tr>
Комментарии для версии 1.7.1 для Joomla 1.5 в режиме Legacy
ниже