DrupalGap icon indicating copy to clipboard operation
DrupalGap copied to clipboard

Exposed filter on my views

Open sangasgar opened this issue 8 years ago • 5 comments

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 avatar Nov 28 '17 09:11 sangasgar

@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**',

signalpoint avatar Nov 28 '17 14:11 signalpoint

Please write an example

I did not understand what you mean.

sangasgar avatar Nov 28 '17 15:11 sangasgar

Please help. I rummaged everything. But I can not understand how do it programmatically

sangasgar avatar Nov 28 '17 20:11 sangasgar

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();
}

sangasgar avatar Nov 28 '17 23:11 sangasgar

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;

sangasgar avatar Dec 11 '17 11:12 sangasgar