jquery get ou post méthodes pour le module de bloc drupal

7

Est-il possible d'utiliser des méthodes jquery get ou post pour récupérer des données dynamiques dans un module de bloc drupal7.x. Je suis un débutant avec Drupal.

Voici mon fichier event_calendar.module

      function event_calendar_help($path, $arg)
      {
          switch ($path) 
          {
          case "admin/help#event_calendar":
          return '<p>'.  t("A block module that creates events and lists them in a event calendar") .'</p>';
      break;
          }
    }
     /**
    * Implements hook_block_info().
    */
    function event_calendar_block_info() {
      $blocks['event_calendar'] = array(
        'info' => t('Event calendar'), 
        'cache' => DRUPAL_CACHE_PER_ROLE, //Default
      );
      return $blocks;
    }

    /**
    * Implements hook_block_view().
    *
    * Prepares the contents of the block.
    */
    function event_calendar_block_view($delta = '') 
    {
      switch($delta)
      {
        case 'event_calendar':
          $block['subject'] = NULL;
          if(user_access('access content'))
           {
            $items = array();        
            $basepath = drupal_get_path('module', 'event_calendar');
            $markup = '<div id="content">
                    <div style="float:right;margin-bottom:5px">
                        <label style="float:left;padding:3px;">Week :</label>
                        <div id="date_picker">
                            <span id="startDate"></span></span> - <span id="endDate"></span>
                            <div class="week-picker" style="display:none;position:absolute"></div>   
                        </div>
                    </div>
                    <hr style="clear:both;"/>
                    <div id="calender_content">

                    </div>
                    <div id="color_code" style="float:right">
                        <div class="lane1 colorbox"></div><div style="float:left">Lane 1</div>
                        <div class="lane2 colorbox"></div><div style="float:left">Lane 2</div>
                        <div class="lane3 colorbox"></div><div style="float:left">Lane 3</div>
                        <div class="lane4 colorbox"></div><div style="float:left">Lane 4</div>
                    </div>
                </div>';
      $block['content'] = array(
        '#markup'   => $markup,
        '#attached' => array
            (
            'css' => array($basepath . '/css/event_calendar.css',$basepath . '/css/smoothness/jquery-ui-1.8.16.custom.css'),
            'js'  => array($basepath . '/javascript/event_calendar.js',$basepath . '/javascript//jquery-ui-1.8.16.custom.min.js'),
            ),
        );

          }
return $block;
      }

    } 

Je veux savoir comment écrire des fonctions à l'intérieur du fichier .module ci-dessus pour accéder dynamiquement à du contenu via la méthode jquery get ou post?

Ou devrais-je utiliser quelque chose comme 'hook_menu' autre que block?

Harish Anchu
la source

Réponses:

3

Pour utiliser get data by jquery ajax, vous devez d'abord définir un lien de menu pour écouter votre demande ajax, et en rappel de votre menu, vous avez renvoyé un bloc ou toutes les données que vous souhaitez.

function yourmodule_menu () {
   $items=array();
   $items['youruniqepath'] =array(
        'title' => 'my menu',
        'description' => 'A menu link to handle ajax request',
        'page callback' => 'yourhandlerfunction',
        'access callback' => TRUE, //you can set it with your permission
      );
   return $items;
   }

et dans votre besoin de passer un bloc:

function yourhandlerfunction () {
  //with any method you want get your block,
  // I suggest something like this
    $block = module_invoke('module_name', 'block_view', 'block_delta');
    print render($block);
}

et dans votre côté client, obtenez-le avec quelque chose comme ça

$.ajax({
    type: "POST",
    url: 'youruniqepath',
    //data: {}, you can also pass block name and act more dynamicly
    success: function (data){
        $('#yourplace').html(data);
    }
});
Yuseferi
la source