Перейти к содержимому


Фотография
- - - - -

Организация сайта недвижимости


Лучший Ответ SmetDenis , 21 October 2013 - 07:51

здесь '' это что-то подобное b1a6b928-c87e-47aa-ad54-94296d39c9b0, насколько я понимаю... Как он формируется/изменяется? Другими словами - я его использую в php-коде как константу, потом что-то меняю в настройках приложения, и '' меняется, все слетает?...

Да, это подобный уникальный идентификатор.
Он не может измениться. Генерируется в момент создания нового поля в материале.
cke_200x0.png

Можно чуть подробнее? Как ее правильно посмотреть? print_r к примеру просто умирает...

data() Должен вернуть массив. Именно в таком виде хранится информация элемента в базе данных.
и именно в таком виде нужно её туда отправлять через bindData
Вместо print_r можно использовать http://joomla-book.ru/projects/jbdump

1. если значение поля известно до заполнения формы (как id агента из моих примеров) достаточно просто в submission.php добавить скрытое поле вида:

По идее, да. Только следите чтобы name был такой же как генерирует его оригинальный элемент.

2. Если значение поля формируется в процессе заполнения формы, то либо jquery/onChange, дибо в обработчике события. Что предпочтительнее по вашему мнению? И почему?

На мой взгляд лучше сделать серверную обработку, например потому что
- Она надежнее, т.к не сломается если вдруг в интерфейсе будет ошибка JS
- Безопаснее, если злоумышленник захочет что-то отправить не валидное
- Весь код в одном месте, т.к не все можно сделать через JS. А через PHP событие все что угодно. Перейти к сообщению


  • Закрытая тема Тема закрыта
Сообщений в теме: 8

#1 nikollos

nikollos

Отправлено 19 October 2013 - 12:20

Мои извинения за объем вопроса, но тут как бы все взаимосвязано, не хочется по разным топикам распылять...

И так, делаю сайт агенства недвижимости. Там есть доска объявлений, на которой могут публиковать свои объявления зарегистрированные пользователи. Хочется, чтобы пользователь после регистрации создал свою собственную учетную запись (аген/риэлтор), которая вставлялась бы в созданные им объявления как "связанный элемент" - назовем ее визиткой для краткости.

Формы подачи для объявлений и для агента я сделал, но теперь возникли некоторые сложности:

1. Хочется сделать так: если новый пользователь пока не создал свою визитку обязать его сделать это, с другой стороны не давать ему плодить эти вихзитки, хватит и одной.. Для этого надо как-то узнать, есть ли уже у него визитка.

В описании формы подачи есть параметр "Submissions Limit", хотел использовать его таким образом, чтобы пользователь не мог создать более одной визитки, а если уже есть визитка, то при попытке добавить новую переключать его в режим редактирования существующей. Однако, там учитывается общее количество материалов от данного пользователя, и визитки и опубликованные объявления, т.е. воспользоваться данной фичей не смог :-(

Попробовал проверять это прямо в submission.php, но нашел только функцию $app->table->item->getItemCountByUser([Appid], [UserId]), которая возвращает количество ВСЕХ записей, а мне нужно узнать количество записей типа "визитка"
Попробовал создать отдельное приложение для хранения записей агентов, но выяснилось, что агентов из другого приложения нельзя вставить в форму подачи объявления, они там просто не видны...
Вопрос следующий: как узнать количество материалов определенного типа от определенного пользователя?

2. Более общий вопрос: как автоматически вставить элемент с конкретным значением в submission.php (не из формы, а программно)?
Поясню на примере того же агента: сейчас в форме подачи объявления сделано поле типа "Связанные элементы" из "Агенты". Пользователю при подаче объявления приходится вручную давить кнопку "Добавить элемент", выбирать из списка агентов себя (кстати, как сделать, чтобы в базе визиток пользователь видел бы только свою, хотя это наверное уже не Zoo, а уровни доступа Joomla?), хотя я мог бы вставить эту запись автоматически, прямо в submissin.php, если бы знал как :-(

 

Или еще пример: у меня пользователю приходится вводить:

  • главное фото объекта
  • изображение плана объекта
  • список фотографий для галлереи

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

 

Еще пример: у меня пользователь вводит поле "адрес объекта". Я прекрасно могу использовать его для формирование гугль-карты не требуя вводить повторно этот адрес в поле "Карта". Можно конечно извратиться, и скопировать его в "Карта" через jquery, но если бы знать, как получить значение конкретного поля, можно все это сделать проще...
 


  • 0

#2 nikollos

nikollos

Отправлено 20 October 2013 - 17:04

Отвечая сам себе ;)

Попробовал проверять это прямо в submission.php, но нашел только функцию $app->table->item->getItemCountByUser([Appid], [UserId]), которая возвращает количество ВСЕХ записей, а мне нужно узнать количество записей типа "визитка"

 

 

Оказалось, что ей и тип можно сообщить:

 

$app->table->item->getItemCountByUser([Appid], [UserId], [Type])

 

так что эта проблема почти решена. Остальные остались :(


  • 0

#3 Sliapy

Sliapy

Отправлено 20 October 2013 - 17:28

Извините за задержку в ответе. Перенаправил Ваш вопрос разработчикам.


  • 0
[color=#aa0000]Не забывайте нажимать кнопку "Вопрос Решён" под сообщением, которое решило Вашу проблему.[/color]

#4 SmetDenis

SmetDenis

Отправлено 20 October 2013 - 18:11

Более общий вопрос: как автоматически вставить элемент с конкретным значением в submission.php (не из формы, а программно)?


Заполнять поля формы модно программно с помощью событий Zoo

Свой код можно добавить в событие "submission:saved" или в "submission:beforesave"
$item->getElement('<ELEMENT_ID>')->data(); // получить данные элемента материала
$item->getElement('<ELEMENT_ID>')->bindData(array()); // сохранить данные в элемент материала
$app->table->item->save($item); // сохранить изменения
При изменении данных элементов аккуратно смотрите на структуру массива, которую можно увидеть через data();
В принципе все ваши кейсы можно решить с помощью событий.

Или еще пример: у меня пользователю приходится вводить: главное фото объекта изображение плана объекта список фотографий для галлереи

Вот тут не понятно, как вы узнаете имя папки?

Для карты Google самый простой вариант - сделать поле редактирования скрытым (hidden).
и наполнять его через jquery на onChange

либо так же до сохранения в обработчике события
  • 0
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.


#5 nikollos

nikollos

Отправлено 21 October 2013 - 07:22

Спасибо за столь быстрый и подробный ответ. Если можно, еще пару уточнений:

 

$item->getElement('<ELEMENT_ID>')->data(); // получить данные элемента материала
$item->getElement('<ELEMENT_ID>')->bindData(array()); // сохранить данные в элемент материала
$app->table->item->save($item); // сохранить изменения

 

здесь '<ELEMENT_ID>' это что-то подобное b1a6b928-c87e-47aa-ad54-94296d39c9b0, насколько я понимаю... Как он формируется/изменяется? Другими словами - я его использую в php-коде как константу, потом что-то меняю в настройках приложения, и '<ELEMENT_ID>' меняется, все слетает?...

 

При изменении данных элементов аккуратно смотрите на структуру массива, которую можно увидеть через data();

 

Можно чуть подробнее? Как ее правильно посмотреть? print_r к примеру просто умирает...

 

 

В принципе все ваши кейсы можно решить с помощью событий.

 

Если я все правильно понял, то варианты такие (в порядке убывания гимора):

 

1. если значение поля известно до заполнения формы (как id агента из моих примеров) достаточно просто в submission.php добавить скрытое поле вида:

<input type="hidden" name="elements[ELEMENT-ID][select]" value="<AGENT-ID>" />

и этого будет достаточно?

 

2. Если значение поля формируется в процессе заполнения формы, то либо jquery/onChange, дибо в обработчике события. Что предпочтительнее по вашему мнению? И почему?


  • 0

#6 SmetDenis

SmetDenis

Отправлено 21 October 2013 - 07:51   Лучший Ответ

здесь '' это что-то подобное b1a6b928-c87e-47aa-ad54-94296d39c9b0, насколько я понимаю... Как он формируется/изменяется? Другими словами - я его использую в php-коде как константу, потом что-то меняю в настройках приложения, и '' меняется, все слетает?...

Да, это подобный уникальный идентификатор.
Он не может измениться. Генерируется в момент создания нового поля в материале.
cke_200x0.png

Можно чуть подробнее? Как ее правильно посмотреть? print_r к примеру просто умирает...

data() Должен вернуть массив. Именно в таком виде хранится информация элемента в базе данных.
и именно в таком виде нужно её туда отправлять через bindData
Вместо print_r можно использовать http://joomla-book.ru/projects/jbdump

1. если значение поля известно до заполнения формы (как id агента из моих примеров) достаточно просто в submission.php добавить скрытое поле вида:

По идее, да. Только следите чтобы name был такой же как генерирует его оригинальный элемент.

2. Если значение поля формируется в процессе заполнения формы, то либо jquery/onChange, дибо в обработчике события. Что предпочтительнее по вашему мнению? И почему?

На мой взгляд лучше сделать серверную обработку, например потому что
- Она надежнее, т.к не сломается если вдруг в интерфейсе будет ошибка JS
- Безопаснее, если злоумышленник захочет что-то отправить не валидное
- Весь код в одном месте, т.к не все можно сделать через JS. А через PHP событие все что угодно.
  • 0
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.


#7 nikollos

nikollos

Отправлено 25 October 2013 - 12:13

Большое спасибо за консультацию, все отлично получается (отдельный респект за инфу про jbdump)

 

Появился еще один вопрос: при формировании титульной страницы формируется полный список объектов для вывода на титульную страницу, причем, выводятся ВСЕ объекты, даже те, которые скрыты для публикации (ну как выводятся - сам элемент для вывода пустой (там чисто <div,,,></div>) но на фронтенде из-за этого появляются пустые блоки...  Ссылку к сожалению дать не могу, он пока только на локальном хостинге, могу показать этот пустой блок на скриншоте:

Буфер обмена01.png

 

Буфер обмена02.png

 

Где копать и что править?


Сообщение отредактировал nikollos: 25 October 2013 - 12:23

  • 0

#8 nikollos

nikollos

Отправлено 25 October 2013 - 23:10

Сорри, ступил... Это оказывается на титульную лезли блоки из других типов (Text Page, Agent и т.д.) Убрал у них вывод на титульную, теперь все нормально...


  • 0

#9 .polega.

.polega.

Отправлено 27 October 2013 - 09:06

nikollos,

перед Вами встала та-же проблема, с которой и я столкнулся. Описывал в этой теме.

Денис вроде и рекомендации дал, только у меня реализовать так и не получилось.

Если у Вас получается сделать автоматическую подстановку агента при подаче, можно ли взглянуть на то, как это реализовано? По аналогии, думаю, что смогу сделать.


  • 0




Click to return to top of page in style!