it-swarm.asia

Widget Javascript kodu (ajax)

Bunun gibi bir widget'ım var:

class test_widget extends WP_Widget{

  function test_widget(){
    $widget_ops = array('description' => 'test widget');
    $this->WP_Widget(false, 'Test', $widget_ops);

    add_action('init', array(&$this, 'ajax'), 99);

    // include in jQuery(document).ready()
    add_action('jquery_init', array(&$this, 'js'));
  }

  function js(){
    // get settings from all widget instances
    $widget_settings = get_option($this->option_name);

    // identify this instance
    foreach($widget_settings as $instance => $options):

      $id = $this->id_base.'-'.$instance;
      $block_id = 'instance-'.$id;

      if (is_active_widget(false, $id, $this->id_base)): ?>

      $("#<?php echo $block_id; ?> .button").click(function(){

        $.ajax({
          type: "GET",
          url: "<?php echo get_bloginfo('url'); ?>",
          data: { id: "<?php echo $block_id; ?>",
                  some_data: "<?php echo $options['some_widget_option']; ?>",
                  my_widget_ajax: 1 },
          success: function(response){
             alert(response);
             // yey
          }
        });
        return false;

      });

      <?php endif;
    endforeach;
  }

  function ajax(){
    if(isset($_GET['my_widget_ajax'])):

      $some_data = esc_attr($_GET['some_data']);

      echo $some_data;
      exit();
    endif;
  }

  function widget($args, $instance){
    // the widget front-end

  }

  function update($new_instance, $old_instance){
    // update form
    return $instance;
  }

  function form($instance){
    // the form
  }
}

Temel olarak, bazı bilgileri alan bir ajax isteğini tetikleyen bir düğme var ...

Gördüğünüz gibi ajax fonksiyonunu ekleyebilmemin tek yolu init etiketine ve js'i javascript'i işleyen bir tema fonksiyonuna bağlamaktı.

Sorun, bunun yalnızca widget'ın bir kenar çubuğunda bulunması durumunda işe yaramasıdır. Ayrıca, örneğin, bu widget'ı the_widget () işleviyle çağırdığımda da çalışmam gerekiyor. bir sayfanın içinde. Javascript kodunda geçirmek için widget seçeneklerini nasıl alabilirim bilmiyorum ...

Herhangi bir fikir?

1
Alex

Sorun, bunun yalnızca widget'ın bir kenar çubuğunda bulunması durumunda işe yaramasıdır.

Widget'tan bağımsız olarak çalıştırmak için bazı kodlara ihtiyacınız varsa, bu kodu widget sınıfından ayrı olarak eklemek mantıklı olur.

Örneğin, bu widget'ı the_widget () işleviyle çağırdığımda da çalışmam gerekiyor. bir sayfanın içinde. Javascript kodunda geçirmek için widget seçeneklerini nasıl alabilirim bilmiyorum ...

Bu işlev, widget verileri içeren örnek diziyi alır. Özelliklerinden emin değilim, ama içeride ne istersen geçebileceğini düşünüyorum.

Doğrudan çağrılan widget'ın, örneğin iletilen (veya kendi başına alınan) dışında hiçbir veri yoktur.

0
Rarst