array( 'handler' => array( 'label' => t('D3JS map'), 'class' => 'FacetapiFilterD3Map', ), ), ); }*/ /** * Implements hook_facetapi_widgets(). */ function d3_facet_france_facetapi_widgets() { return array( 'facetapi_d3_facet_france_map' => array( 'handler' => array( 'label' => t('D3 France map'), 'class' => 'FacetAPID3FranceWidgetMap', 'query types' => array( 'term', 'date', ), ), ) ); } /** * Implements hook_facetapi_realm_info(). ?? */ function d3_facet_france_facetapi_realm_info() { $realms = array(); $realms['d3_facet_france_data_map'] = array( 'label' => t('D3 France Data MAP'), 'weight' => 100, 'sortable' => FALSE, 'default widget' => 'd3_facet_france_combo_data', 'element type' => 'd3_facet_france_map_combo_data', 'settings callback' => '', // not yet implemented sample is: facetapi_block_realm_settings (though that function is not implemented anywhere yet) 'description' => t( 'Facet for produce D3JS map on France' ), ); return $realms; } /** * Implements hook_theme(). */ function d3_facet_france_theme() { $hooks['d3_map_france'] = array( 'variables' => array( 'element' => NULL, // 'need a preprocess' ), ); return $hooks; } function template_preprocess_d3_map_france(&$variables) { libraries_load('d3.drupal'); drupal_add_js( 'sites/all/libraries/d3Tooltip/Tooltip.js', array( 'type' => 'file', 'scope' => 'header', ) ); drupal_add_js( drupal_get_path('module', 'd3_facet_france').'/zoom_fr.js', array( 'type' => 'file', 'scope' => 'footer', ) ); drupal_add_css( drupal_get_path('module', 'd3_facet_france').'/style_zoom_fr.css', array( 'type' => 'file', ) ); } function theme_d3_map_france(&$variables){ //On compose le tableau $regions = node_load_multiple(array(), array('type' => 'region')); $json_string = ''; if(!empty($regions)){ foreach($regions as $region){ $perimetre = field_get_items('node', $region, 'field_perimetre_json'); if($perimetre[0]['value']!=''){ $nid = $region->nid; $element = $variables['element'][$nid]; $search = explode('/', $element['#path']); $code_sandre = field_get_items('node', $region, 'field_sandre_nomenclature'); //FIX ME : $variables['element'][$region->nid]['#query']['f'][0] doit en fait être un $region_json_string = ' "type":"Feature", "entity_type":"node", "entity_type_name":"'.$region->type.'", "id":'.$region->nid.', "properties" : { "name":"'.$region->title.'", "code":"'.$code_sandre[0]['value'].'", "value":"'.($element['#count']?$element['#count']:'').'", "path":"'.$element['#path'].'", "search":"'.$search[2].'", "query":'.json_encode($element['#query']).' }, "geometry":{"type":"Polygon", "coordinates":'.$perimetre[0]['value'].'}'; //todo : On va chercher les départements $dpts = field_get_items('node', $region, 'field_departement'); if(!empty($dpts)){ $dpt_json_string = ''; foreach($dpts as $dpt){ if($dpt['nid']!='' && $dep = node_load($dpt['nid'])){ $nid_dep = $dep->nid; $element_dep = $variables['element'][$nid_dep]; $code_sandre = field_get_items('node', $dep, 'field_sandre_nomenclature'); $perimetre_dep = field_get_items('node', $dep, 'field_perimetre_json'); $search_dep = explode('/', $element_dep['#path']); $dpt_json_string.= '{ "type":"Feature", "entity_type":"node", "entity_type_name":"'.$dep->type.'", "id":'.$dep->nid.', "properties" : { "name":"'.$dep->title.'", "code":"'.$code_sandre[0]['value'].'", "value":"'.($element_dep['#count']?$element_dep['#count']:'').'", "path":"'.$element_dep['#path'].'", "search":"'.$search_dep[2].'", "query":'.json_encode($element_dep['#query']).' }, "geometry":{"type":"Polygon", "coordinates":'.($perimetre_dep[0]['value']!=''?$perimetre_dep[0]['value']:'[]').'} },'; } } } $region_json_string.=',"childs":{"type":"FeatureCollection","features":['.substr($dpt_json_string,0,-1).']}'; $json_string.='{'.$region_json_string.'},'; } } $json_string = substr($json_string, 0, -1); $json_string = '{"type":"FeatureCollection","features":['.$json_string.']}'; } $script =' jQuery(document).ready(function() { var json_region='.$json_string.'; // définition du sélecteur pour placer la carte carto_france("div#facet-d3js-france", json_region); }); '; //FIX ME : voir si moyen de passer par un tableau avec une clé ayant "#attached" drupal_add_js($script, array('type' => 'inline', 'scope' => 'footer', 'weight' => 100)); return '
'; //} //return 'vide'; } function d3_facet_france_page_build(&$page) { $page['page_bottom']['d3_facet_france_map_fr']['#markup'] = ''; } /** * Fill in a bunch of page variables for our graph and load flot */ /* function template_preprocess_d3_facet_france_maps(&$variables) { drupal_add_css(drupal_get_path('module', 'advanced_help') . '/help-popup.css'); drupal_add_css(drupal_get_path('module', 'advanced_help') . '/help.css'); $variables['head_title'] = implode(' | ', $head_title); }*/