SlideShare a Scribd company logo
1 of 14
СПИСКИ И AJAX
 Два списка со связанными данными 
 id="sel_onto“ – первый список 
 id="info_onto“ - второй список 
 Первый список содержит список 
объектов типа Ontology 
 Второй список заполняется данными из 
объекта, выбранного в первом списке
Рассмотрен пример организации 
взаимодействия двух списков в шаблоне 
CMS Plone средствами Java Scripts и AJAX 
запросов
Разметка списка 
<div><label>Select ontology<div 
id="list_Onto"> 
<select class="array" id="sel_onto"> 
</select> 
<select class="array" id="info_onto"> 
</select> 
</div>
Подключение скрипта 
<div metal:fill-slot="main"> 
<script 
src="++resource++guieditor.js/gui_main.js" 
type="text/javascript"></script>
Регистрация каталога 
Регистрация каталога для javascripts в 
browser.zcml 
<browser:resourceDirectory 
name="guieditor.js" 
directory="js" 
/>
Регистрация скрипта 
Регистрация скрипта в browser.zcml 
<browser:resource 
name="gui_main.js" 
file="js/gui_main.js" 
/>
(function($) { 
base=document.baseURI; 
//получаем адрес портала 
url1=base+"guieditor?listonto=all"; 
//формируем адрес сервиса 
….здесь функция формирования списка 
}
функция формирования списка 
jq.ajax({ 
url: url1, 
complete: function(data, status) { 
var json = eval('(' + data.responseText + ')'); 
var selContainer =jq("#list_Onto"); 
var tmp='‘ 
jq.each(json, function(key, value) { 
tmp=tmp+'<option value="'+value+'">'+value+'</option>'; 
}); 
$("#sel_onto").html(tmp); 
} 
});
обработка события 
изменение значения в первом списке 
jq("#sel_onto1").change(function() { 
var new_val=$('#sel_onto1 
option:selected').val(); 
var 
url2=document.baseURI+"guieditor1?ontovalue 
="+new_val; 
jq.getJSON(url2, function(data) { 
..здесь перебор элементов data и 
формирование второго списка 
});
 функции 
 jq.ajax({ 
url: url1, 
complete: function(data, status)}) 
 jq.getJSON(url2, function(data) ) 
 имеют одинаковое действие
класс сервиса 
class GuiEditor1(BrowserView): 
template = 
ViewPageTemplateFile('templates/GuiEditor1.pt') 
def __init__(self, context,request): 
self.context=context 
self.request=request
сервис 
запрос: url1=base+"guieditor?listonto=all"; 
def __call__(self): 
if hasattr(self.request, 'listonto'): 
if self.request['listonto']=='all': 
self.request.response.setHeader('content-type', 
'application/json; charset=utf-8') 
response_body = self.list_ontologys() 
response_http = json.dumps(response_body) 
self.request.response.setHeader('content-length', 
len(response_http)) 
return response_http
формирование списка объектов 
def list_ontologys(self): 
l=[i.getObject() for i in 
self.catalogtool.searchResults(portal_type=" 
Ontology")] 
f={} 
for i in l: 
f[str(i.getTitle())]=i.getId() 
return f

More Related Content

Similar to Реалтзация связанных списков в CMS Plone

презентация Day4
презентация Day4презентация Day4
презентация Day4
Bulatov Edward
 
Web весна 2012 лекция 9
Web весна 2012 лекция 9Web весна 2012 лекция 9
Web весна 2012 лекция 9
Technopark
 
CatalogLoader 2014 Belarus Minsk DNUG
CatalogLoader 2014 Belarus Minsk DNUGCatalogLoader 2014 Belarus Minsk DNUG
CatalogLoader 2014 Belarus Minsk DNUG
Nikolai Kekish
 
Web осень 2013 лекция 6
Web осень 2013 лекция 6Web осень 2013 лекция 6
Web осень 2013 лекция 6
Technopark
 
Каталоги и поиск в plone
Каталоги и поиск в ploneКаталоги и поиск в plone
Каталоги и поиск в plone
Sergey Greger
 
Frontend весна 2014 лекция 2
Frontend весна 2014 лекция 2Frontend весна 2014 лекция 2
Frontend весна 2014 лекция 2
Technopark
 
Web весна 2013 лекция 4
Web весна 2013 лекция 4Web весна 2013 лекция 4
Web весна 2013 лекция 4
Technopark
 
Frontend весна 2014 лекция 3
Frontend весна 2014 лекция 3Frontend весна 2014 лекция 3
Frontend весна 2014 лекция 3
Technopark
 

Similar to Реалтзация связанных списков в CMS Plone (20)

Jsfwdays 2013-2
Jsfwdays 2013-2Jsfwdays 2013-2
Jsfwdays 2013-2
 
DOM & jQuery
DOM & jQueryDOM & jQuery
DOM & jQuery
 
course js day 4
course js day 4course js day 4
course js day 4
 
AngularJS. Введение и простые примеры для понимания
AngularJS. Введение и простые примеры для пониманияAngularJS. Введение и простые примеры для понимания
AngularJS. Введение и простые примеры для понимания
 
Angular js
Angular jsAngular js
Angular js
 
Google Tag Manager: вебинар продвинутого уровня/
Google Tag Manager: вебинар продвинутого уровня/Google Tag Manager: вебинар продвинутого уровня/
Google Tag Manager: вебинар продвинутого уровня/
 
презентация Day4
презентация Day4презентация Day4
презентация Day4
 
презентация Day4
презентация Day4презентация Day4
презентация Day4
 
Web весна 2012 лекция 9
Web весна 2012 лекция 9Web весна 2012 лекция 9
Web весна 2012 лекция 9
 
CatalogLoader 2014 Belarus Minsk DNUG
CatalogLoader 2014 Belarus Minsk DNUGCatalogLoader 2014 Belarus Minsk DNUG
CatalogLoader 2014 Belarus Minsk DNUG
 
Приложения для Windows Phone: как мы это делаем #codefest
Приложения для Windows Phone: как мы это делаем #codefestПриложения для Windows Phone: как мы это делаем #codefest
Приложения для Windows Phone: как мы это делаем #codefest
 
Web осень 2013 лекция 6
Web осень 2013 лекция 6Web осень 2013 лекция 6
Web осень 2013 лекция 6
 
Каталоги и поиск в plone
Каталоги и поиск в ploneКаталоги и поиск в plone
Каталоги и поиск в plone
 
XSS. Обходы фильтров и защит.
XSS. Обходы фильтров и защит.XSS. Обходы фильтров и защит.
XSS. Обходы фильтров и защит.
 
Frontend весна 2014 лекция 2
Frontend весна 2014 лекция 2Frontend весна 2014 лекция 2
Frontend весна 2014 лекция 2
 
Web весна 2013 лекция 4
Web весна 2013 лекция 4Web весна 2013 лекция 4
Web весна 2013 лекция 4
 
Укрощение XML
Укрощение XMLУкрощение XML
Укрощение XML
 
JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.
 
jQuery как путь к RIA
jQuery как путь к RIAjQuery как путь к RIA
jQuery как путь к RIA
 
Frontend весна 2014 лекция 3
Frontend весна 2014 лекция 3Frontend весна 2014 лекция 3
Frontend весна 2014 лекция 3
 

Реалтзация связанных списков в CMS Plone

  • 2.  Два списка со связанными данными  id="sel_onto“ – первый список  id="info_onto“ - второй список  Первый список содержит список объектов типа Ontology  Второй список заполняется данными из объекта, выбранного в первом списке
  • 3. Рассмотрен пример организации взаимодействия двух списков в шаблоне CMS Plone средствами Java Scripts и AJAX запросов
  • 4. Разметка списка <div><label>Select ontology<div id="list_Onto"> <select class="array" id="sel_onto"> </select> <select class="array" id="info_onto"> </select> </div>
  • 5. Подключение скрипта <div metal:fill-slot="main"> <script src="++resource++guieditor.js/gui_main.js" type="text/javascript"></script>
  • 6. Регистрация каталога Регистрация каталога для javascripts в browser.zcml <browser:resourceDirectory name="guieditor.js" directory="js" />
  • 7. Регистрация скрипта Регистрация скрипта в browser.zcml <browser:resource name="gui_main.js" file="js/gui_main.js" />
  • 8. (function($) { base=document.baseURI; //получаем адрес портала url1=base+"guieditor?listonto=all"; //формируем адрес сервиса ….здесь функция формирования списка }
  • 9. функция формирования списка jq.ajax({ url: url1, complete: function(data, status) { var json = eval('(' + data.responseText + ')'); var selContainer =jq("#list_Onto"); var tmp='‘ jq.each(json, function(key, value) { tmp=tmp+'<option value="'+value+'">'+value+'</option>'; }); $("#sel_onto").html(tmp); } });
  • 10. обработка события изменение значения в первом списке jq("#sel_onto1").change(function() { var new_val=$('#sel_onto1 option:selected').val(); var url2=document.baseURI+"guieditor1?ontovalue ="+new_val; jq.getJSON(url2, function(data) { ..здесь перебор элементов data и формирование второго списка });
  • 11.  функции  jq.ajax({ url: url1, complete: function(data, status)})  jq.getJSON(url2, function(data) )  имеют одинаковое действие
  • 12. класс сервиса class GuiEditor1(BrowserView): template = ViewPageTemplateFile('templates/GuiEditor1.pt') def __init__(self, context,request): self.context=context self.request=request
  • 13. сервис запрос: url1=base+"guieditor?listonto=all"; def __call__(self): if hasattr(self.request, 'listonto'): if self.request['listonto']=='all': self.request.response.setHeader('content-type', 'application/json; charset=utf-8') response_body = self.list_ontologys() response_http = json.dumps(response_body) self.request.response.setHeader('content-length', len(response_http)) return response_http
  • 14. формирование списка объектов def list_ontologys(self): l=[i.getObject() for i in self.catalogtool.searchResults(portal_type=" Ontology")] f={} for i in l: f[str(i.getTitle())]=i.getId() return f