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

nonick

  • Захожу иногда
  • 85
  • 8 / 0
Спешу поделиться и вынести на ваш суд свой компонент "Страны и города".
Цели которые преследую создавая этот пост:
  • поделится разработкой
  • услышать критику и рекомендации от гуру относительно написания компонента (ну это конечно при наличии у них свободного времени для просмотра моей "мазни"  ::))
  • привнести новый функционал в компонент если понадобится и довести до ума существующий


Для чего собственно компонент:
Компонент позволяет разработчику манипулировать состоянием списка городов, регионов, стран. Компонент дает возможность разработчику использовать каскадный список стран в любой (наверное) форме на сайте, будь то форма обратной связи, адрес доставки товара и пр. где пользователю необходимо выбрать Страну и город.

Возможности:
В админ панели компонента:
На главной странице компонента отображаются страны, регионы, города добавленные пользователями. Стандартные манипуляции над данными (публикация, редактирование). Два способа просмотра данных один можно сказать "линейный" просмотр всех стран или регионов или городов - отображаются по id (пагинация присутствует), второй каскадный - при выборе страны,"Показать регионы" просматриваем все регионы этой страны, ну и при выборе региона - просмотр городов "Показать города". Можно пакетно "Опубликовать", "Скрыть" страну или регион - если выбрать страну и нажать кнопку "Пакетно Показать" то будут опубликованы все регионы этой страны и все города этой страны - данный способ публикации как наверное догадываетесь может быть очень долгим и превысить timeout выполнения скрипта, так что не рекомендую отмечать по несколько стран, лучше по одной.

На сайте:
Пользователь не только выбирает из списка страну, регионы и город, но может добавить свой если такого в списке нет. Если пользователь добавил свой город и нажал кнопку "Add city" или "Add all field" - то в админ части у вас будет отображен список тех стран и пр. что добавляет пользователь.

Как использовать:
1. Установить компонент и опубликовать те страны, регионы, города которые планируется использовать в форме. (Админ панель)
2. В Компоненте где планируете использовать этот компонент следует подключить библиотеку jQuery, она находится в папке "js" в папке компонента, к моему сожалению я не смог правильно подключить локальную библиотеку потому использовал подключение библиотеки с сайта Google. Я подключаю так
Код
$document  = &JFactory::getDocument();
$document->addScript('http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.js');
это до объявления класса в файле представления.
3. Дальше необходимо создать объект модели компонента и вызвать метод getCountryList()
Код
$path = JPATH_ADMINISTRATOR.DS.'components'.DS.'com_country';
require_once ($path.DS.'models'.DS.'frontend.php');

$modelCountry = new CountryModelFrontend();
$list = $modelCountry->getCountryList();
$this->assignRef('listCountries',$list);
.
теперь в форме нужно вывести этот список
Код
<div class="place">
   <span class="status" style="color:blue;font-weight:bold"></span><br/>
   <?php echo $this->listCountries; ?>
   <div class="countries"></div>
   <div class="regions"></div>
   <div class="cities"></div>
</div>
status и div можете изменить согласно вашему дизайна, главное чтобы контейнеры имели классы как указано выше.
Ну вот и все, теперь при загрузке страницы с вашей формой у вас отобразится список стран. Изначально на сайт в указанное вами место в форме подгружается статический список стран опубликованных и системных, когда пользователь выбирает одну из стран динамически подгружается список регионов этой страны, ну и с городами  тоже самое. Если пользователь выбирает в списке "Другая страна"  то ему подгружаются поля для ввода названия страны, региона и города, после того как пользователь нажмет кнопку "Add all fields" или город. в форму  будут добавлены id добавленных в базу полей input type=hidden.

Так как пользователь может добавить свой город. регион или страну (или все сразу) то и при обработке следует выполнить проверку - что же нам прислал пользователь. я делаю это следующим способом
Код
//в представлении 
$dataForm = JRequest::get('post');
$this->assignRef('dataForm',$dataForm);

// в шаблоне (tmpl/default.php)
if($this->dataForm['countries']<1){
// Пользователь должен был указать все поля
$countryId = $this->dataForm['idCountry'];
$regionId = $this->dataForm['idRegion'];
$cityId = $this->dataForm['idCity'];
}else{
$countryId = $this->dataForm['countries'];
if($this->dataForm['regions']<1){
$regionId = $this->dataForm['idRegion'];
$cityId = $this->dataForm['idCity'];
}else{
$regionId = $this->dataForm['regions'];
if($this->dataForm['cities']<1){
$cityId = $this->dataForm['idCity'];
}else{
$cityId = $this->dataForm['cities'];
}
}
}?>
при установке компонента в БД создается 3 таблицы и заполняются данными (порядка 17 000 городов 218 стран и несколько тысяч регионов)
во вложении кроме компонента com_country есть com_hello в нем можно посмотреть работу компонента com_country для этого необходимо в адресной строке ввести адрес index.php?option=com_hello&task=showForm&view=sending - заполнить поля формы ( ::) фактически там одно поле) и нажать кнопку "Send"

[вложение удалено Администратором]
« Последнее редактирование: 24.09.2010, 03:22:19 от nonick »
*

tbhost

  • Захожу иногда
  • 158
  • 10 / 6
Re: Компонент "Страны и Города"
« Ответ #1 : 24.09.2010, 04:47:28 »
Вопросы.
1. Нативная ли версия под 1.5?
2. Включен ли в компонент системный плагин поиска по городам и странам в связке с пользователем?
3. С какими бесплатными расширениями есть связь. Например Job, love можно соорудить или нет?
4. Есть ли плагины для CommunityBulder и JomSocial

Приведите рабочие примеры работы компонента.
*

nonick

  • Захожу иногда
  • 85
  • 8 / 0
Re: Компонент "Страны и Города"
« Ответ #2 : 24.09.2010, 12:11:17 »
1. Да
2. Поиска нет - так как этот компонент служит только для вывода каскадного списка
3. Связь - нет.
4. Нет, но для CB можно написать плагин, я так понимаю. Хотите чтобы в CB можно было в профиле пользователя выбирать из списка стран?

Компнент пока тестирую и использую в моем проекте, в котором есть необходимость чтобы в формах пользователь указывал Страну, Регион Город, решил написать компонент с помощью которого я смогу управлять данными и динамически подгружать их в любую форму.
« Последнее редактирование: 24.09.2010, 12:17:43 от nonick »
*

nonick

  • Захожу иногда
  • 85
  • 8 / 0
Re: Компонент "Страны и Города"
« Ответ #3 : 27.09.2010, 01:06:14 »
Просьба к скачавшим, отпишитесь, как установился, получили ли что ожидали от компонента, если нет, то что ожидали от него.
интересует любая информация и идеи, мнения о компоненте.
Спасибо.
*

vladya

  • Осваиваюсь на форуме
  • 18
  • 6 / 0
Re: Компонент "Страны и Города"
« Ответ #4 : 05.04.2011, 00:42:56 »
За компонент спасибо, думал уже сам написать подобный, а тут встретился он. Буду тестировать, как появятся какие то мысли - отпишусь.
*

nonick

  • Захожу иногда
  • 85
  • 8 / 0
Re: Компонент "Страны и Города"
« Ответ #5 : 15.04.2011, 22:30:09 »
В нем я делал некоторые изменения, но проект заглох(( если ещё актуально, я могу посмотреть и выложить последний релиз так сказать
*

zuich

  • Новичок
  • 9
  • 3 / 0
Re: Компонент "Страны и Города"
« Ответ #6 : 15.04.2011, 22:48:03 »
будьте добры, выложите
*

nonick

  • Захожу иногда
  • 85
  • 8 / 0
Re: Компонент "Страны и Города"
« Ответ #7 : 17.04.2011, 15:25:55 »
Выдрал из проекта как есть http://nonick.name/country.zip внутри сам компонент (НЕ ИНСТАЛЯЦИЯ) и папка с примером использования, пример использования тоже выдран из другого компонента. Все на скорую руку (много работы). Если не разберешься пиши - буду искать время и приведу все в порядок.
*

vladya

  • Осваиваюсь на форуме
  • 18
  • 6 / 0
Re: Компонент "Страны и Города"
« Ответ #8 : 18.04.2011, 16:40:59 »
Пересобрал этот компонент для 1.6, исправил некоторые баги и немного доработал. Если автор не против - могу выложить его для всех желающих.
*

zuich

  • Новичок
  • 9
  • 3 / 0
Re: Компонент "Страны и Города"
« Ответ #9 : 18.04.2011, 20:16:44 »
спасибо
Ещё хотелосьбынагло спросить, а можно добавить в список выбора Страна- район - Город - Улица - Дом
« Последнее редактирование: 18.04.2011, 20:22:04 от zuich »
*

nonick

  • Захожу иногда
  • 85
  • 8 / 0
Re: Компонент "Страны и Города"
« Ответ #10 : 19.04.2011, 00:29:05 »
В данной реализации нет, но можно сделать по аналогии с регионом и городом, скопировать реализацию добавления города, переименовать методы и если необходимо переменные, добавить в БД таблицу и поля и ...... ловить ошибки - исправлять - и наслаждаться своей работой ))
*

nonick

  • Захожу иногда
  • 85
  • 8 / 0
Re: Компонент "Страны и Города"
« Ответ #11 : 19.04.2011, 00:29:38 »
Пересобрал этот компонент для 1.6, исправил некоторые баги и немного доработал. Если автор не против - могу выложить его для всех желающих.
Я только за!
*

vladya

  • Осваиваюсь на форуме
  • 18
  • 6 / 0
Re: Компонент "Страны и Города"
« Ответ #12 : 19.04.2011, 23:11:03 »
Компонент для 1.6

Что было сделано:
1. Добавлены настройки для включения и отключения возможности добавления пользователем стран, регионов и городов.
2. Javascript обработки был вынесен в отдельный файл и во фронтальную часть.
3. Также контроллер frontend.php был вынесен во фронтальную часть.
4. Винницкая область в файле install.sql перенесена в Украину.

Re: Компонент "Страны и Города"
« Ответ #13 : 17.05.2011, 19:47:35 »
Не бейте ногами.   Я следую инструкции , я так понял что весь код можно запихать в один файл, почему бы и нет.
вот собственно запихал код:

1- $document  = &JFactory::getDocument();
2- $document->addScript('http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.js');

3- $path = JPATH_ADMINISTRATOR.DS.'components'.DS.'com_country';
4- require_once ($path.DS.'models'.DS.'frontend.php');
5- $modelCountry = new CountryModelFrontend();
6- $list = $modelCountry->getCountryList();
7- $this->assignRef('listCountries',$list);

8- echo $this->listCountries;

а у меня стал ругаться на строчку 6  >>> $this->assignRef('listCountries',$list);
Пишет:
Fatal error: Call to undefined method JDocumentRendererModule::assignRef() in Z:\home\test1.ru\www\1\modules\... . 
Что я делаю не так?
*

nonick

  • Захожу иногда
  • 85
  • 8 / 0
Re: Компонент "Страны и Города"
« Ответ #14 : 18.05.2011, 14:36:42 »
 На вскидку
Цитировать
6  >>> $this->assignRef('listCountries',$list);
скорее всего вызывается в контексте того класса в котором нет доступа к компонету, сейчас решения не могу сказать, буду возле домашнего компа, попробую помочь.   
*

hitler35

  • Новичок
  • 4
  • 0 / 0
Re: Компонент "Страны и Города"
« Ответ #15 : 10.08.2011, 16:57:04 »
а чтобы вставить в свою форму этот компонент что нужно сделать?
*

nonick

  • Захожу иногда
  • 85
  • 8 / 0
Re: Компонент "Страны и Города"
« Ответ #16 : 17.08.2011, 16:47:53 »
Этот компонет можно использовать компонентах и модулях. Если форма создается руками, то можно постараться прикрутить, если форму генерит компонет, то нужно модернизировать сам компонет.
*

nick71

  • Завсегдатай
  • 1149
  • 12 / 12
  • Сайты любой сложности - обращайтесь
Re: Компонент "Страны и Города"
« Ответ #17 : 09.10.2011, 14:06:07 »
Ищу на каком компоненте создать доску строительных специалистов. В принципе выбор немаленький, можно и Mosets Tree, SOBI2, AdsManager и т.д., но проблема именно в том чтобы при добавлении пользователь мог выбрать область (Украина) и в следующем окне город выбранной области. Отсюда вопрос к nonick: можно ли как-то ваш компонент прикрутить к какому-то из этих компонентов, и если да то я готов посотрудничать, если удобно - стучите в асю: 473737041, задача срочная.
*

Иннокентий Петров

  • Новичок
  • 9
  • 0 / 0
Re: Компонент "Страны и Города"
« Ответ #18 : 10.10.2011, 02:00:54 »
Подскажите пожалуйста, как вы решили этот вопрос со странами и городами?
Пытался побыстрому прикрутить к J1.7 но ничего сразу не получается.

Базу стран и городов я скорректировал и залил, а вот с остальным не совсем где-то разобрался. Потом пытался несколько раз переустановить, поменяв все на jos_ в таблицах но пишет: 

При установке он пишет: Ошибка при создании меню панели управления

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

Хотелось бы этот копонент подключить к базам ZOO, чтобы фильтровать по странам и городам + JomSocial.
 
*

Bmw258

  • Захожу иногда
  • 76
  • 4 / 0
Re: Компонент "Страны и Города"
« Ответ #19 : 11.10.2011, 19:49:27 »
Спасибо автору за его труд и потраченное время на создание компонента. Я только установил его малость опубликовал городов и запустил,всё заработала на ура! Это то что я хотел, скажите мне ещё надо вот чтоб у меня были машины и тоже был выбор по маркам и классу,думаю поняли. Как лучше это сделать? Готов заплатить,если доведёте до ума так сказать,желательно его привязать например к CommunityBulder или JomSocial очень нужно. Оплата в пределах разумного. Если найдёте время,то напишите в личку. Есть ещё один похожий компонент тоже кто то писал,но как им пользоваться не сказал толком,так что не чё не понятно,но он сделал плагин для CB только всё равно у меня не чё не получилось. И кстати про JomSocial вчера спрашивал на форуме про такое дополнение,мне ответили что они тестируют плагин с такими возможностями и типо скоро будет,а платный или нет не сказали.
*

Иннокентий Петров

  • Новичок
  • 9
  • 0 / 0
Re: Компонент "Страны и Города"
« Ответ #20 : 11.10.2011, 21:13:55 »
Спасибо автору за его труд и потраченное время на создание компонента. Я только установил его малость опубликовал городов и запустил,всё заработала на ура! Это то что я хотел, скажите мне ещё надо вот чтоб у меня были машины и тоже был выбор по маркам и классу,думаю поняли. Как лучше это сделать? Готов заплатить,если доведёте до ума так сказать,желательно его привязать например к CommunityBulder или JomSocial очень нужно. Оплата в пределах разумного. Если найдёте время,то напишите в личку. Есть ещё один похожий компонент тоже кто то писал,но как им пользоваться не сказал толком,так что не чё не понятно,но он сделал плагин для CB только всё равно у меня не чё не получилось. И кстати про JomSocial вчера спрашивал на форуме про такое дополнение,мне ответили что они тестируют плагин с такими возможностями и типо скоро будет,а платный или нет не сказали.

Установили на J1.7? или на 1,5?
*

Bmw258

  • Захожу иногда
  • 76
  • 4 / 0
Re: Компонент "Страны и Города"
« Ответ #21 : 11.10.2011, 23:30:30 »
Пока на 1.5,про 1.7 забыл надо глянуть.
*

Иннокентий Петров

  • Новичок
  • 9
  • 0 / 0
Re: Компонент "Страны и Города"
« Ответ #22 : 12.10.2011, 00:24:55 »
Пока на 1.5,про 1.7 забыл надо глянуть.
На 1,5 он ставится, а на 1.7 нет! Брал версию 1.6 с Com_hello. Он я так понимаю для получения вывода переменных для демо. На 1,5 все нормально.

Как вывести на экран с Модуля «HTML-код»? Что туда конкретно нужно прописыать? Даже в 1.5 не могу понять как вывести на экран?
 
*

Bmw258

  • Захожу иногда
  • 76
  • 4 / 0
Re: Компонент "Страны и Города"
« Ответ #23 : 12.10.2011, 01:08:43 »
Да с 1.7 проблемы. В joomle 1.5-1.6 как Мы знаем стоит префикс jos_ ,а в 1.7 он генерируется,поэтому при установки установка проходит нормально,но городов нет,так как думаю какое то обращение к базе не верное или что то ещё. Проблему решил путём замены префикса в 1.7 на jos_ ,но это не выход,но работает. Установил другой компонент com_hello и после обращения по указанной строки входа на сайт,денвер выругался вот так
Код
Warning: require_once(Z:\home\localhost\www\1.55/administrator\components\com_country\models\frontend.php) [function.require-once]: failed to open stream: No such file or directory in Z:\home\localhost\www\1.55\components\com_hello\views\sending\view.html.php on line 24

Fatal error: require_once() [function.require]: Failed opening required 'Z:\home\localhost\www\1.55/administrator\components\com_country\models\frontend.php' (include_path='.;/usr/local/php5/PEAR') in Z:\home\localhost\www\1.55\components\com_hello\views\sending\view.html.php on line 24

Щас спать,завтра буду смотреть,что да как.
*

Иннокентий Петров

  • Новичок
  • 9
  • 0 / 0
Re: Компонент "Страны и Города"
« Ответ #24 : 12.10.2011, 16:35:43 »
Да с 1.7 проблемы. В joomle 1.5-1.6 как Мы знаем стоит префикс jos_ ,а в 1.7 он генерируется,поэтому при установки установка проходит нормально,но городов нет,так как думаю какое то обращение к базе не верное или что то ещё. Проблему решил путём замены префикса в 1.7 на jos_ ,но это не выход,но работает. Установил другой компонент com_hello и после обращения по указанной строки входа на сайт,денвер выругался вот так
Код
Warning: require_once(Z:\home\localhost\www\1.55/administrator\components\com_country\models\frontend.php) [function.require-once]: failed to open stream: No such file or directory in Z:\home\localhost\www\1.55\components\com_hello\views\sending\view.html.php on line 24

Fatal error: require_once() [function.require]: Failed opening required 'Z:\home\localhost\www\1.55/administrator\components\com_country\models\frontend.php' (include_path='.;/usr/local/php5/PEAR') in Z:\home\localhost\www\1.55\components\com_hello\views\sending\view.html.php on line 24

Щас спать,завтра буду смотреть,что да как.

С jos_ проблема решаемая, а вот с размещением и выводом нет. Фактически не может поместить в меню (в некоторых случаях).

На локальном вообще hello не ставится, а на удаленном при открытии меню пункта hello пишет:

404 - Обнаружена ошибка.

Компонент не найден

Вернуться в Панель управления
*

Bmw258

  • Захожу иногда
  • 76
  • 4 / 0
Re: Компонент "Страны и Города"
« Ответ #25 : 12.10.2011, 17:00:26 »
Как ты решил проблему для 1.7 с jos_ ? У тебя при установки разве не выругался сервер?Точнее с jos_ всё ставится,только не чё не работает списков нет.Или ты уже менял префикс после установки?
*

Иннокентий Петров

  • Новичок
  • 9
  • 0 / 0
Re: Компонент "Страны и Города"
« Ответ #26 : 12.10.2011, 17:48:34 »
Как ты решил проблему для 1.7 с jos_ ? У тебя при установки разве не выругался сервер?Точнее с jos_ всё ставится,только не чё не работает списков нет.Или ты уже менял префикс после установки?

Я же писал, что это не проблема и я менял на нужный или во всей базе менял на jos_
базы поставились и активировал их.
*

avteck

  • Захожу иногда
  • 54
  • 1 / 0
Re: Компонент "Страны и Города"
« Ответ #27 : 21.04.2012, 03:06:19 »
Всем доброго времени суток! Помогите пожалуйста  привязать этот компонент  к lovefactory к форме поиска и в регистрации,  делал все по инструкции что описана nonick-ом, первые шаги вроде сделал
1. Зашел в components\com_lovefactory\views\advancedsearch\view.html.php и вписал там как описано выше  
Как использовать:
1. Установить компонент и опубликовать те страны, регионы, города которые планируется использовать в форме. (Админ панель)
2. В Компоненте где планируете использовать этот компонент следует подключить библиотеку jQuery, она находится в папке "js" в папке компонента, к моему сожалению я не смог правильно подключить локальную библиотеку потому использовал подключение библиотеки с сайта Google. Я подключаю так
Код:
$document  = &JFactory::getDocument();
$document->addScript('http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.js');это до объявления класса в файле представления.
3. Дальше необходимо создать объект модели компонента и вызвать метод getCountryList()
Код:
$path = JPATH_ADMINISTRATOR.DS.'components'.DS.'com_country';
require_once ($path.DS.'models'.DS.'frontend.php');
   
$modelCountry = new CountryModelFrontend();
$list = $modelCountry->getCountryList();
$this->assignRef('listCountries',$list);


Куда вписывать остальное я что то не понял или может быть я изначально не туда полез? кстати тест с hello работает на ура
Это
теперь в форме нужно вывести этот список
Код:
<div class="place">
   <span class="status" style="color:blue;font-weight:bold"></span><br/>
   <?php echo $this->listCountries; ?>
   <div class="countries"></div>
   <div class="regions"></div>
   <div class="cities"></div>
</div>
и это
Код:
//в представлении
$dataForm = JRequest::get('post');
$this->assignRef('dataForm',$dataForm);

// в шаблоне (tmpl/default.php)
if($this->dataForm['countries']<1){
   // Пользователь должен был указать все поля
   $countryId = $this->dataForm['idCountry'];
   $regionId = $this->dataForm['idRegion'];
   $cityId = $this->dataForm['idCity'];
}else{
   $countryId = $this->dataForm['countries'];
   if($this->dataForm['regions']<1){
      $regionId = $this->dataForm['idRegion'];
      $cityId = $this->dataForm['idCity'];
   }else{
      $regionId = $this->dataForm['regions'];
      if($this->dataForm['cities']<1){
         $cityId = $this->dataForm['idCity'];
      }else{
         $cityId = $this->dataForm['cities'];
      }
   }
}?>при установке компонента в БД создается 3 таблицы и заполняются данными (порядка 17 000 городов 218 стран и несколько тысяч регионов)
во вложении кроме компонента com_country есть com_hello в нем можно посмотреть работу компонента com_country для этого необходимо в адресной строке ввести адрес index.php?option=com_hello&task=showForm&view=sending - заполнить поля формы (  фактически там одно поле) и нажать кнопку "Send"
« Последнее редактирование: 21.04.2012, 03:30:55 от avteck »
*

nick71

  • Завсегдатай
  • 1149
  • 12 / 12
  • Сайты любой сложности - обращайтесь
Re: Компонент "Страны и Города"
« Ответ #28 : 21.04.2012, 07:34:41 »
а компонент развивается? Для Дж. 2.5 будет?
*

nonick

  • Захожу иногда
  • 85
  • 8 / 0
Re: Компонент "Страны и Города"
« Ответ #29 : 21.04.2012, 14:33:05 »
а компонент развивается? Для Дж. 2.5 будет?
да, основной функционал уже переделан под 2,5, сейчас пишу плагин для СВ.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Компонент для создания тестов Ari Quiz

Автор alex_noize

Ответов: 0
Просмотров: 853
Последний ответ 25.02.2016, 20:31:51
от alex_noize
Компонент для подмены файлов ядра jHacksPro

Автор rigin

Ответов: 0
Просмотров: 791
Последний ответ 04.10.2014, 18:13:40
от rigin
Установленный компонент не появляется в типах меню

Автор Александр216

Ответов: 2
Просмотров: 841
Последний ответ 13.06.2014, 18:37:42
от b2z
Как установленный компонент сделать установочным файлом?

Автор ftorit

Ответов: 0
Просмотров: 672
Последний ответ 31.05.2014, 22:17:57
от ftorit
Компонент для редактирования таблицы БД

Автор maxsl_89

Ответов: 4
Просмотров: 846
Последний ответ 27.03.2014, 13:24:57
от maxsl_89