Exposed filter on my views
I have exposed filter
newobiavlenia1.json?field_plochad_value_1=min_plochad_filter&field_plochad_value=max_plochad_filter&field_tip_obiavlenia_value=tip_obiavlenia
I want to create this filter on my views. How i can insert the value of filter in my json views? Now i have this code:
/**
* Implements hook_menu().
*/
function viewmodule_menu() {
try {
var items = {};
items['viewmodule'] = {
title: 'Поиск объявлений',
page_callback: 'viewmodule_list_page'
};
return items;
}
catch (error) {
console.log('viewmodule_menu - ' + error);
}
}
function viewmodule_list_page() {
try {
var content = {};
content['min_plochad'] = {
markup: '<b>Минимальная площадь</b>'
};
content['viewmodule_slider'] = {
theme: 'range',
attributes: {
onchange: 'min_plochad_filter',
min: '0',
max: '1000',
value: '0',
'data-theme': 'b'
}
};
content['max_plochad'] = {
markup: '<b>Максимальная площадь</b>'
};
content['viewmodule_slider1'] = {
theme: 'range',
attributes: {
onchange: 'max_plochad_filter',
min: '0',
max: '1000',
value: '0',
'data-theme': 'b'
}
};
content['tip_obiavlenia'] = {
markup: '<b>Тип объявления</b>'
};
content['tip_obiavlenia'] = {
theme: 'checkboxes',
options: {
sdat: 'Сдать',
prodat: 'Продать',
kupit: 'Купить',
sniat: 'Снять'
}
};
content['filter_button'] = {
theme: 'button',
text: 'Применить',
attributes: {
onclick: "_filter_button_click()",
'data-theme': 'b'
}
};
content['viewmodule_list'] = {
theme: 'view',
format: 'ul',
path: 'newobiavlenia1.json?field_plochad_value_1=**min_plochad_filter**&field_plochad_value=**max_plochad_filter**&field_tip_obiavlenia_value=**tip_obiavlenia**',
exposed_filters: false,
row_callback: 'viewmodule_list_page_row',
empty_callback: 'viewmodule_list_page_empty'
};
return content;
}
catch (error) { console.log('viewmodule_list_page - ' + error); }
}
function viewmodule_list_page_row(view, row) {
try {
var max_plochad_filter = 'range.max_plochad_filter';
var title = '<h2>' + row.title + '</h2>';
var html = l(title, 'node/' + row.nid);
return html;
}
catch (error) { console.log('viewmodule_list_page_row - ' + error); }
}
function my_module_beer_list_page_empty(view) {
try {
return "Sorry, we are out of beer.";
}
catch (error) { console.log('viewmodule_list_page_empty - ' + error); }
}
@sangasgar Put them in the path:
path: 'newobiavlenia1.json&field_plochad_value_1=**min_plochad_filter**&field_plochad_value=**max_plochad_filter**&field_tip_obiavlenia_value=**tip_obiavlenia**',
Please write an example
I did not understand what you mean.
Please help. I rummaged everything. But I can not understand how do it programmatically
This code works, when use select filter, But how to create range filter for exposed filter?
/**
* Implements hook_menu().
*/
function viewmodule_menu() {
var items = {};
items['viewmodule'] = {
title: 'My page',
page_callback: 'viewmodule_page',
pageshow: 'viewmodule_pageshow'
};
return items;
}
function viewmodule_container_id() {
return 'viewmodule-container';
}
function viewmodule_page() {
var content = {};
content.filter = {
theme: 'viewmodule_filter'
};
var id = viewmodule_container_id();
content.container = {
markup: '<div id="' + id + '"></div>'
};
return content;
}
function viewmodule_pageshow() {
var content = {};
// Build a path to the View with a contextual filter.
var viewsPath = 'newobiavlenia1.json&field_tip_obiavlenia_value=' + viewmodule_filter_value();
// Build a Views Render Array with contextual filter.
content.results = {
theme: 'view',
path: viewsPath,
exposed_filters: false,
format: 'ul',
row_callback: 'viewmodule_row',
empty_callback: 'viewmodule_empty'
}
// Inject the rendered content into our div.
$('#' + viewmodule_container_id()).html(
drupalgap_render(content)
).trigger('create');
}
function viewmodule_row(view, row, variables) {
return l(row.title, 'node/' + row.nid);
}
function viewmodule_empty(view) {
return t('No content found.');
}
function theme_viewmodule_filter(variables) {
return theme('select', {
options: {
All: t('Все'),
Сдать: t('Сдать'),
accepted: t('Accepted'),
declined: t('Declined'),
expired: t('Expired'),
withdrawn: t('Withdrawn')
},
attributes: {
onchange: 'viewmodule_filter_onchange(this)',
class: 'viewmodule-filter',
'data-theme': 'b'
}
});
}
function viewmodule_filter_value() {
return $('#' + drupalgap_get_page_id() + ' select.viewmodule-filter').val();
}
function viewmodule_filter_onchange(select) {
//console.log($(select).val());
viewmodule_pageshow();
}
I found a solution how to use range in views Example
function my_module_menu() {
try {
var items = {};
items['map'] = {
title: 'Map',
page_callback: 'my_module_map',
pageshow: 'my_module_map_pageshow'
};
return items;
}
catch (error) { console.log('my_module_menu - ' + error); }
}
/**
* The map page callback.
*/
function my_module_map() {
try {
var content = {};
content['my_slider'] = {
theme: 'range',
attributes: {
min: '0',
max: '100',
value: '10',
'data-theme': 'b',
id: 'my_module_distance',
}
};
return content;
}
catch (error) { console.log('my_module_map - ' + error); }
}
And you can insert in your views value of range Example
range = $('input#my_module_distance').val();
var path = 'my-map.json/' + range;