simple and advanced versions of pfb search

This commit is contained in:
Frédéric Péters 2011-11-20 18:32:00 +01:00
parent d936015d1d
commit 51dca56f4a
4 changed files with 301 additions and 0 deletions

View File

@ -0,0 +1,138 @@
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
xmlns:tal="http://xml.zope.org/namespaces/tal"
xmlns:metal="http://xml.zope.org/namespaces/metal"
xmlns:i18n="http://xml.zope.org/namespaces/i18n"
lang="en"
metal:use-macro="context/main_template/macros/master"
i18n:domain="tabellio.searchform">
<body>
<metal:main fill-slot="main">
<tal:main-macro metal:define-macro="main">
<tal:block tal:define="Batch python:modules['Products.CMFPlone'].Batch;
mq python:modules['ZTUtils'].make_query;
url batch_base_url | request/ACTUAL_URL;
batchformkeys batchformkeys|nothing;
batchlinkparams python:batchformkeys and dict([(key, unicode(request.form[key]).encode('utf-8')) for key in batchformkeys if key in request]) or dict([(key, unicode(request.form[key]).encode('utf-8')) for key in request.form]);
b_size python:10; b_size request/b_size | b_size;
b_start python:0;b_start request/b_start | b_start;">
<h1 class="documentFirstHeading">Recherche avancée</h1>
<a id="other-search" href="pfbsearch">Recherche</a>
<div id="deputies-results" class="advbox">
<h2 id="b_deputy_start">Députés</h2>
<form>
...
</form>
</div>
<div id="docs-results" class="advbox">
<h2 id="b_doc_start">Documents</h2>
<form method="post" tal:attributes="action string:${view/pfbdocform_url}#resultsbox">
<div tal:replace="structure view/document_pfb_search_form"/>
</form>
</div>
<div id="events-results" class="advbox">
<h2 id="b_event_start">Événements</h2>
<form>
...
</form>
</div>
<div id="pages-results" class="advbox">
<h2 id="b_page_start">Ailleurs sur le site</h2>
<form>
...
</form>
</div>
<div tal:replace="structure provider:plone.belowcontentbody" />
<script type="text/javascript" tal:content="string: var PORTAL_URL='${view/portal_url}';"/>
<script type="text/javascript">
function update_authors_input(input) {
var s = '';
jq(input).nextAll('span.labelbox').each(function() {
s = s + ' ' + jq(this).attr('class').split(' ')[1];
});
jq(input).attr('value', s);
}
function author_autocomplete_ready(event, data, formatted) {
(function($) {
var input_box = $(event.target);
// XXX: don't insert item if it's already present
labelbox = $('<span class="labelbox ' + data[1] + '">' + data[0] + '<' + '/span>');
$(input_box).before(labelbox);
$(labelbox).click(function() {
$(this).remove();
update_authors_input(jq(input_box).prevAll('input')[0]);
});
update_authors_input(jq(input_box).prevAll('input')[0]);
$(input_box).attr('value', '');
}(jQuery));
}
function sync_from_checkboxes(elem, dummyinput)
{
t = '';
$(elem).find('span.option').each(function(idx, el) {
if ($(el).find('input').attr('checked')) {
if (t.length > 0) {
t = t + ', ';
}
t = t + $(el).find('label span').text();
}
});
$(dummyinput).attr('value', t);
}
function setup_appearance(index, elem)
{
var dummyinput = $('<input type="text" readonly="readonly"/>');
sync_from_checkboxes(elem, dummyinput);
dummyinput.click(function() {
$(elem).find('div.droppedcheckboxes').toggle();
});
$(elem).find('.fieldErrorBox').after(dummyinput);
$(elem).find('span.option').wrapAll('<div class="droppedcheckboxes">').click(function() {
sync_from_checkboxes(elem, dummyinput);
});
$(elem).find('div.droppedcheckboxes').hide();
}
function setup_sort_on(index, elem)
{
$(elem).find('label.horizontal').click(function() {
$(elem).find('div.droppedradios').toggle();
});
$(elem).find('span.option').wrapAll('<div class="droppedradios">');
$(elem).find('div.droppedradios').hide();
}
(function($) {
$().ready(function() {
$('.author-autocomplete').autocomplete(PORTAL_URL+'/listAuthors', {
}).result(author_autocomplete_ready);
$('#formfield-document-widgets-l_doctypes').each(setup_appearance);
$('#formfield-document-widgets-l_topics').each(setup_appearance);
$('#formfield-document-widgets-l_polgroups').each(setup_appearance);
$('#formfield-document-widgets-sort_on').each(setup_sort_on);
$('div.advbox form').hide();
$('div.advbox h2').click(function() { $(this).parent().find('form').toggle(); });
});
})(jQuery);
</script>
</tal:block>
</tal:main-macro>
</metal:main>
</body>
</html>

View File

@ -72,6 +72,13 @@
permission="zope2.View"
template="simple-pfb.pt"/>
<browser:page
for="Products.CMFPlone.interfaces.IPloneSiteRoot"
name="pfbadvsearch"
class=".form.SearchView"
permission="zope2.View"
template="advsearch-pfb.pt"/>
<browser:page
for="Products.CMFPlone.interfaces.IPloneSiteRoot"
name="guided-search"

View File

@ -667,6 +667,16 @@ class SearchView(BrowserView):
def question_search_results(self):
return self.search_results(search_type='question')
def pfbdocform_url(self):
catalog = getToolByName(self.context, 'portal_catalog')
try:
return catalog(
portal_type='Folder',
object_provides='tabellio.searchform.form.IFolderWithPfbDocuments',
limit=1)[0].getObject().absolute_url()
except IndexError:
return '#'
class Reflex(BrowserView):
def __call__(self):
@ -688,3 +698,4 @@ class Reflex(BrowserView):
if not rs:
return self.request.response.redirect('.')
return self.request.response.redirect(rs[0].getURL())

View File

@ -0,0 +1,145 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:tal="http://xml.zope.org/namespaces/tal"
xmlns:metal="http://xml.zope.org/namespaces/metal"
metal:use-macro="context/main_template/macros/master">
<body>
<metal:main fill-slot="main">
<tal:main-macro metal:define-macro="main">
<h1 class="documentFirstHeading">Page de résultats</h1>
<a id="other-search" href="pfbadvsearch">Recherche avancée</a>
<div id="simplesearch"
tal:define="Batch python:modules['Products.CMFPlone'].Batch;
mq python:modules['ZTUtils'].make_query;
url batch_base_url | request/ACTUAL_URL;
batchformkeys batchformkeys|nothing;
deputy_results view/deputy_results;
page_results view/page_results;
doc_results view/doc_results;
event_results view/event_results;
b_size python:5; b_size request/b_size | b_size;
b_start python:0;
b_deputy_start python:0;b_deputy_start request/b_deputy_start | b_start;
b_page_start python:0;b_page_start request/b_page_start | b_start;
b_doc_start python:0;b_doc_start request/b_doc_start | b_start;
b_event_start python:0;b_event_start request/b_event_start | b_start;
deputy_batch python:Batch(list(deputy_results), b_size, int(b_deputy_start), orphan=1, b_start_str='b_deputy_start');
page_batch python:Batch(list(page_results), b_size, int(b_page_start), orphan=1, b_start_str='b_page_start');
doc_batch python:Batch(list(doc_results), b_size, int(b_doc_start), orphan=1, b_start_str='b_doc_start');
event_batch python:Batch(list(event_results), b_size, int(b_event_start), orphan=1, b_start_str='b_event_start');
">
<div id="deputies-results" tal:condition="python:len(deputy_results)">
<h2 id="b_deputy_start">Députés</h2>
<div class="resultsinfobox">
<span>Nombre de résultats : <span tal:replace="python:len(deputy_results)"/></span>
<a class="button" tal:attributes="href view/deputy_form_url">Filtre avancé</a>
</div>
<div class="results">
<ul>
<tal:entry tal:repeat="deputy python: deputy_batch">
<li tal:define="oddrow repeat/deputy/odd;" tal:attributes="class python: oddrow and 'odd' or 'even'"><div>
<h4><a href="#" tal:attributes="href deputy/getURL" tal:content="deputy/Title">Véronique Salvi</a></h4>
<p class="intitule" tal:define="deputy_object python: deputy.getObject()">
Groupe politique : <span tal:content="deputy_object/polgroup/to_object/title"/>
<tal:block tal:condition="deputy_object/district">
-
Arrondissement : <span tal:content="deputy_object/district"/>
</tal:block>
<tal:block tal:condition="not: deputy_object/active">
-
<i>Ce député ne siège plus.</i>
</tal:block>
</p>
</div></li>
</tal:entry>
</ul>
</div>
<div tal:define="batch deputy_batch">
<div metal:use-macro="view/batch_macros/macros/navigation" />
</div>
</div>
<div id="docs-results" tal:condition="python:len(doc_results)">
<h2 id="b_doc_start">Documents et dossiers</h2>
<div class="resultsinfobox">
<span>Nombre de résultats : <span tal:replace="python:len(doc_results)"/></span>
<a class="button" tal:attributes="href view/docdos_form_url">Filtre avancé</a>
</div>
<div class="results">
<ul>
<tal:entry tal:repeat="doc doc_batch">
<li tal:define="oddrow repeat/doc/odd;" tal:attributes="class python: oddrow and 'odd' or 'even'"><div>
<h4><a href="#" tal:attributes="href doc/getURL" tal:content="python: doc.getObject().reftitle">Véronique Salvi</a></h4>
<p class="intitule" tal:content="doc/Title"/>
</div></li>
</tal:entry>
</ul>
</div>
<div tal:define="batch doc_batch">
<div metal:use-macro="view/batch_macros/macros/navigation" />
</div>
</div>
<div id="events-results" tal:condition="python:len(event_results)">
<h2 id="b_event_start">Événements</h2>
<div class="resultsinfobox">
<span>Nombre de résultats : <span tal:replace="python:len(event_results)"/></span>
<a class="button" tal:attributes="href view/event_form_url">Filtre avancé</a>
</div>
<div class="results">
<ul>
<tal:entry tal:repeat="event event_batch">
<li tal:define="oddrow repeat/event/odd;" tal:attributes="class python: oddrow and 'odd' or 'even'"><div>
<h4><a href="#" tal:attributes="href event/getURL" tal:content="event/Title">Véronique Salvi</a></h4>
</div></li>
</tal:entry>
</ul>
</div>
<div tal:define="batch event_batch">
<div metal:use-macro="view/batch_macros/macros/navigation" />
</div>
</div>
<div id="pages-results" tal:condition="python:len(page_results)">
<h2 id="b_page_start">Ailleurs sur le site</h2>
<div class="resultsinfobox">
<span>Nombre de résultats : <span tal:replace="python:len(page_results)"/></span>
</div>
<div class="results">
<ul>
<tal:entry tal:repeat="page page_batch">
<li tal:define="oddrow repeat/page/odd;" tal:attributes="class python: oddrow and 'odd' or 'even'"><div>
<h4><a href="#" tal:attributes="href page/getURL" tal:content="python: page.Title or page.id">Communiqué de presse</a></h4>
<p tal:content="page/Description">bla</p>
</div></li>
</tal:entry>
</ul>
</div>
<div tal:define="batch page_batch">
<div metal:use-macro="view/batch_macros/macros/navigation" />
</div>
</div>
</div>
</tal:main-macro>
</metal:main>
</body>
</html>