Новости Joomla

0 Пользователей и 1 Гость просматривают эту тему.
  • 75 Ответов
  • 34508 Просмотров
*

beliyadm

  • Moderator
  • 9758
  • 1664 / 66
  • Севастополь, Россия
Часто на нашем форуме пробегает вопрос - как сделать каталог с теми или иными полями. Рассмотрим в данном примере галерею от 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 { }
и добавляем строку
Код
var $place=null;

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 и добавляем строку
Код
. " a.place, "
чуть ниже есть собственно массив 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 ниже
« Последнее редактирование: 30.03.2009, 06:05:19 от beliyadm »
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm

огромищенский респект...давно ждал подобную статью!
а как сделать так, что-бы сами пользователи могли сами добавлять данные в поля которые я создам?

сразу помогу чайникам
Цитировать
ALTER TABLE `meb_datsogallery` ADD `place` VARCHAR( 250 ) NOT NULL AFTER `imgtitle` ;
meb - это префикс...обычно у всех  jos. не забудь поменять.
Некоторые файлы находятся тут administrator\components\com_datsogallery
« Последнее редактирование: 17.10.2007, 23:17:27 от Артур Викторович »
*

beliyadm

  • Moderator
  • 9758
  • 1664 / 66
  • Севастополь, Россия
из фронтенда?
вносить аналогичные изменения в нужные файлы, сам этого не делал, но по аналогии думаю не сложно
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm

спасибо...я не знаю правльно ты меня понял или нет...
например:
посетитель добавляет изображение своей картины через фронтэнд и что-бы вписать реальный размер этой картины и описать технику исполнения нужны специальные поля.Вот что имел ввиду.ещё раз спасибо :)

так долго ковырялся но всё-таки разобрался...
    $place               = mosGetParam($_REQUEST, 'place, ''); ты после плэйс чёрточку вверху пропустил :)
*

beliyadm

  • Moderator
  • 9758
  • 1664 / 66
  • Севастополь, Россия
так долго ковырялся но всё-таки разобрался...
действительно :) спасибо
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm

С последней строчкой что-то не то.У меня заработало только вот с такой (и в конце;) вставляю перед echo "</table>\n";

<td width='70%' valign='top'>".$row->place."</td>\n</tr>\n";
Благодаря таким вот форумам ,начинаешь втягиваться в интересный мир черточек и галочек :)
*

beliyadm

  • Moderator
  • 9758
  • 1664 / 66
  • Севастополь, Россия
в массив новую переменную добавили как я писал? тогда все будет работать как описано
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm

да добавил..но не фурычит без .$row->place и всё....а как там начёт добавления данных в мои поля из фронтэнда?подскажи хотя-бы что где писать (по аналогии ,знаю...но все-же чуть по подробней)
*

beliyadm

  • Moderator
  • 9758
  • 1664 / 66
  • Севастополь, Россия
странно, почему же у меня тогда работает :)
насчет добавления приношу извинения, в связи с большим проектом забросил галерею
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm

ну хотя бы двумя словами опиши примерно...просто для меня это очень важно
*

pantech

  • Новичок
  • 6
  • 0 / 0
Вижу автор темы очень занят. Попробую закончить данный вопрос, а  именно как сделать чтобы дополнительные поля использовались при добавлении и изменении изображения пользователем.

Итак:

Открываем файл: datsogallery.php

Находим строку - где-то №36. с кодом:
Код
$imgauthor           = trim( mosGetParam( $_POST, 'imgauthor', '' ) );

После нее вставляем:

Код
 $place          = trim( mosGetParam( $_POST, 'place', '' ) );

Далее находим строки, где-то № 582 с кодом:

   
Код
echo "<tr class='sectiontableentry2'>\n";
    echo "<td valign='top' align='right'>"._DG_CATEGORY.":</td>\n";
    echo "<td>\n";
echo $clist;
    echo "<td valign='top'>" .mosToolTip( _DG_SHOWUPLOAD_2 )."</td>";
    echo "</td>\n";
    echo "</tr>\n";

После нее вставляем:


Код
 echo "<td width='20%' align='right'> Производитель:</td>\n";
    echo "<td width='80%'>\n";
    echo "<input class='inputbox' type='text' name='place' size='50' maxlength='100' value='".htmlspecialchars(@$row->place, ENT_QUOTES)."' />";
   echo "<td valign='top'>" .mosToolTip( "Укажите производителя")."</td>";

     echo "</td>\n";
    echo "</tr>\n";

Далее находим строки, где-то № 673 с кодом:

   
Код
 echo "<tr class='sectiontableentry2'>\n";
    echo "<td valign='top' align='right'>"._DG_CATEGORY.":</td>\n";
    echo "<td>\n";
echo $clist;
    echo "</td>\n";
    echo "</tr>\n";

После нее вставляем:

 
Код
echo "<tr class='sectiontableentry2'>\n";
    echo "<td width = '20%' align = 'right'>Производитель:</td>\n";
    echo "<td width = '80%'>";
    echo "<input class='inputbox' type='text' name='place' size='51' maxlength='100' value='".htmlspecialchars($row->place, ENT_QUOTES)."'/>";
    echo "</td>\n";
    echo "</tr>\n";

Точно также и со всеми остальными полями. Удачи!

« Последнее редактирование: 29.10.2007, 23:21:07 от beliyadm »

большое спасибо! очень помог.отличный форум и люди :)
*

FxPunter

  • Давно я тут
  • 691
  • 112 / 7
  • Э-эх!
А покажите :) как это будет выглядеть? Кто сделал.
*

sagemy

  • Осваиваюсь на форуме
  • 12
  • 0 / 0
Огромное спасибо beliyadm и pantech.
Я по вашему "мануалу" сделал - все Ок. Скоро бду размещать, сейчас в локали.


В продолжении темы (я уже задавал вопрос, и в коммерческой теме тоже - не ответили ленивые программисты :-)) ) - работа с созданными полями для селекции нужных объектов.

Плиз подскажите (ммм. такое подробное руководство вплоть до кодов не надо - не стоит время тратить, на уровне что где лежит) как сделать выборку двух видов (поиск что ли) по созданным полям:

1. Типа фильтр - например у меня определенное дополнительное поле с пред выбранными параметрами ( у меня например так и есть - админ выбирает из выпадающего списка до 60 значений и таких полей 3 у картинки) и при просмотре галлереи я хочу оставить для просмотра (сохранив существующую структуру каталогов) только те объекты поля которых что отвечают выбранному значению в фильтре (те же 60 штук значений например). Т.е я не делаю поиск в полном смысле, но каждый объект перед выводом проверяется на соответствие поля и выводится структура каталогов обычная с нужными объектами

Здесь меня интересует - какой файл в компоненте обрабатывает вывод объекта? я бы туда добавил просто проверку условия. Вроде просто если не ошибаюсь.
И еще куда лучше разместить фильтр - в структуру галлерии или это все равно? Переменную с любого места могу передать обработчику же?

2. Динамический зал (набрался терминов из Gallery2) - это уже вывод объектов в одну кучу - по типу результатов поиска. Например я опять таки выбираю из выпадающего поля (или просто я садист для посетителей своей страницы и у меня сбоку меню в 60 пунктов :-)) ) нужное значение и обработчик выводит в галерее в одной категории все работы без учета категорий и подкатегорий. При этом что бы я еще по одному полю бы выбор сделал и вышли бы еще более урезанные результаты - соответствующие первому и второму выбранному параметру.
вот такая вот задача.

Здесь вопросов больше. Кроме проверки соответствия условию и размещения в обработчике самого объекта как все завязано со структурой вывода. Даже не знаю что спрашивать здесь кроме общего вопроса - как?

Кажется это интересно. Разве что заинтересовать может тех кто создает галереи с большим  глубоко структурированным контентом...
*

sagemy

  • Осваиваюсь на форуме
  • 12
  • 0 / 0
Цитировать
2 - пишешь модуль и добавляешь новую функцию вывода по заданным в модуле параметрам

Ну вы даете :-))) Спасибо, но я понимаю конечно что краткость = СТ  (сестра таланта), но что бы так талантливо :-)))

beliyadm я на форуме смотрел ваши посты, по многим (и еще там один smart по моему) сам можно сказать учился. Плиз если найдете время все таки подробнее. Я не знаю чесно говоря как написать модуль, не зная какие элементы задействовать

Цитировать
1 - не понял идеи
скажем так. Я каким то образом задал значение переменной (или даже нескольких - у меня это планируется выпадающие поля фильтра). И вот я хожу по галерее - например в какой то категории есть 3 картинки - у 2х из них дополнительные поля отвечают значениям соответствующих переменных , вот зайдя в категорию я и увижу только эти две фото и так по всей галерее. Джаст фильтр.

Это я могу сам сделать - просто скажи в каком файле в датсо проверяется при выводе (или не выводе) картинки при просмотре например параметр поля из базы "опубликовано или неопубликованное" - я думаю я вполне могу туда засунуть проверку на соответствие моим заданным условиям.

Заранее спасибо за проявленный интерес. И ответ в любой форме.
*

FxPunter

  • Давно я тут
  • 691
  • 112 / 7
  • Э-эх!
Ребята, кто делал для версии 1,6 приведете вставку, предложенного в первом посте, кодов
*

FxPunter

  • Давно я тут
  • 691
  • 112 / 7
  • Э-эх!
попробовала я, поле появилось :)
Но вот количество просмотров у меня стало таким: 12589652350 и не пойму, почему в админке оно для заполнения не появилось :(

Это всё хорошо. Однако, есть проблемы.
Решил я добавить дополнительное поле на к фотографии, а к категории. Чтобы во фронтенде в списке категорий отображался короткий текст, а при выборе категории - длинный. Собственно, добавляем поле "Короткий текст".
Задача: ввод производится в админке в стандартном поле типа TEXTAREA. Никакого визуального редактора не нужно. Самая главная проблема: перед вводом данных в базу значение этого поля должно обрабатываться функциями nl2br,strip_tags,substr. В итоге получаем сплошной текст без тегов и переносов строк длиной не более 300 символов.
Собственно, разобрался, где и что добавить. Поле есть, данные добавляются и изменяются, во фронтенде выводятся корректно. Но вот обработать значение данного поля я не могу!
Подскажите, как это сделать.

Пара фрагментов для пояснения своих слов.
1. Поле в admin.datsogallery.html.php
Код
<tr>
<td valign="top" ><b><?php echo _DG_CAT_TITLE; ?>:</b><br><i><?php echo _DG_CAT_TITLE_DESCRIPTION; ?></i></td>
<td nowrap ><textarea name="ttitle" cols="100" rows="5"><? echo $row->ttitle; ?></textarea></td>
</tr>
Всё работает.

2. Внимание! В admin.datsogallery.php функция записи данных выглядит так:
Код
function saveCatg( $option, $task )
{
global $database, $my;
$row = new mosCatgs( $database );
if (!$row->bind( $_POST )) {
echo "<script> alert('".$row->getError()."'); window.history.go(-1); </script>\n";
exit(); }
mosMakeHtmlSafe($row->name);
if ($row->parent == $row->cid) {
mosRedirect( "index2.php?option=$option&task=showcatg", _DG_SUBCAT_SELECT_ERROR );
}
if (!$row->check()) {
echo "<script> alert('".$row->getError()."'); window.history.go(-1); </script>\n";
exit(); }
if (!$row->store()) {
echo "<script> alert('".$row->getError()."'); window.history.go(-1); </script>\n";
exit(); }
$row->checkin();
$row->updateOrder( "" );
mosRedirect( "index2.php?option=$option&task=showcatg" );
}
Если закомментировать последний редирект и добавить строку типа
Код
echo $row->ttitle;
то данные исправно выводятся на экран (т.е.переменная существует и с ней можно работать). Я хочу обработать данную переменную такой конструкцией:
Код
$row->ttitle=strip_tags(nl2br($row->ttitle));
Это ничего не даёт, в базу данных добавляется первоначальное значение (с тегами и переносами). В чём я неправ?
*

mijsvit

  • Захожу иногда
  • 137
  • 7 / 0
Как насчет безопасности использования даных полей? Я имею ввиду sql-запросы и другие методы взлома?
Спасибо.
*

C.VIP

  • Новичок
  • 3
  • 3 / 0
  • Не, ну может быть....
Думаю с ними безопасноть будет выше, чем со стандартными, ибо стандартные запросы известны, а вот что вы там понаписали на новые нет....
*

Konstantin

  • Новичок
  • 8
  • 0 / 0
добавление поля в базу данных
1 - добавляем поле в БД, назовем его к примеру - place, добавим сразу после поля "название картинки" (imgtitle)
Код
ALTER TABLE `meb_datsogallery` ADD `place` VARCHAR( 250 ) NOT NULL AFTER `imgtitle` ;

Подскажите пожалуйста, как добавить новое поле в БД, это делается в PHP my Admin или прописывается в файлах Datso Gallery?
Заранее благодарен:)
*

FxPunter

  • Давно я тут
  • 691
  • 112 / 7
  • Э-эх!
*

Konstantin

  • Новичок
  • 8
  • 0 / 0

Спасибо beliyadm за дельные рекомнедации.

Пробовал на DatsoGallery 1.62. Поле добавилось, в админке редактировалосб, с выводом не получилось, пока.

Я добавлял поле keywords (ключевые слова). Большинство поисковиков, тот же yandex индексирует картинки по тегу "alt". Иметь галлерею, которая не "светится" в поисковиках фотографу смысла нет. По умолчанию в DatsoGallery подставляется название фото. Никто не подскажет, как подставить название фото + ключевые слова?
« Последнее редактирование: 05.06.2008, 10:50:06 от wrs »
*

yunoshev

  • Завсегдатай
  • 1271
  • 179 / 1
А покажите :) как это будет выглядеть? Кто сделал.

Показываю: Мебельный сайт средствами DatsoGallery :)
*

kommunizm

  • Осваиваюсь на форуме
  • 32
  • 6 / 0
Добрый день, у меня такой вопрос - Возможен ли перевод дополнтельных полей внесеных данным способом JoomFish компонентом (с установленными файлами для datsogallery). И естественно если да то какие изменения внести в коде, или какие таблицы добавить в базу данных для возможности перевода дополнительно созданных полей.
*

yunoshev

  • Завсегдатай
  • 1271
  • 179 / 1
Добрый день.
Нужно создать файл типа \administrator\components\com_joomfish\contentelements\datsogallery_catg.xml (или добавить в него) примерно с таким содержимым:
Код
<?xml version="1.0" ?>
<joomfish type="contentelement">
<name>DatsoGallery - Квартиры</name>
<author>Yunoshev Victor</author>
<version>1.0</version>
<description>Definition for DatsoGallery Category</description>
<reference>
<table name="datsogallery_catg">
<field type="referenceid" name="cid" translate="0">ID</field>
<field type="titletext" name="name" translate="1">Имя</field>
<field type="text" name="street" translate="1">Улица</field>
<field type="text" name="floor" translate="1">Этаж</field>
<field type="text" name="area" translate="1">Площадь</field>
<field type="text" name="water" translate="1">Вода</field>
<field type="htmltext" name="comforts" translate="1">Удобства</field>
<field type="htmltext" name="description" translate="1">Описание</field>
</table>
</reference>
</joomfish>
где street, floor, area, water, comforts -- новые поля в Вашей базе данных в таблице #__datsogallery_catg.

Данный пример относится к JoomFish v.1.7
*

kommunizm

  • Осваиваюсь на форуме
  • 32
  • 6 / 0
yunoshev  :D Благодарю за скорый ответ.

И еще при оставление комментарий в datso - можно ли сделать доступным и не зарегестрированным пользователям и сначало отправлять комментраий на проверку администратору, и уже послу администратор публикует комментарии?
*

beliyadm

  • Moderator
  • 9758
  • 1664 / 66
  • Севастополь, Россия
И еще при оставление комментарий в datso - можно ли сделать доступным и не зарегестрированным пользователям и сначало отправлять комментраий на проверку администратору, и уже послу администратор публикует комментарии?
я думаю что лучше поставить компонент jcomment, интеграция в datso описана здесь - функционала в нем намного больше (в том числе и премодерация)
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Постраничная навигация для Datso 1.8.1 (page navigation)

Автор beliyadm

Ответов: 12
Просмотров: 8306
Последний ответ 16.02.2011, 21:44:01
от Aalia
[DownLoad] Datso Gallery + New Userpannel /Joomla 1.5.x

Автор ershovdz

Ответов: 115
Просмотров: 61285
Последний ответ 02.10.2010, 18:58:14
от icy-heart
Модификация datso

Автор Iven

Ответов: 4
Просмотров: 2893
Последний ответ 22.05.2009, 15:24:40
от Iven
Datso 1.5 ошибка в обработке имени файла. Найдено решение.

Автор Фей

Ответов: 6
Просмотров: 2987
Последний ответ 24.07.2008, 14:24:42
от PaLyCH
Убрать заголовок категории в Datso

Автор Melnikoff

Ответов: 1
Просмотров: 2987
Последний ответ 23.07.2007, 03:49:47
от put_nik