alex
  • 0
Учитель

Код Javascript виджета (ajax)

  • 0

У меня есть такой виджет:

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
  }
}

По сути, в нем есть кнопка, которая запускает запрос ajax, который извлекает некоторую информацию…

Как видите, единственный способ добавить функцию ajax — это подключить ее к тегу инициализации, а js — к функции темы, которая обрабатывает javascript.

Проблема в том, что это работает только тогда, когда виджет присутствует на боковой панели. И мне также нужно, чтобы он работал, когда я вызываю этот виджет с функцией the_widget(), например. внутри страницы. Я не знаю, как я могу получить параметры виджета, чтобы передать их в код javascript…

Есть идеи?

Share
  1. хорошо, я добавил javascript внутри вывода виджета. не очень элегантно, но работает…

    • 0
  2. Проблема в том, что это работает только тогда, когда виджет присутствует на боковой панели.

    Если вам нужен какой-то код для запуска независимо от виджета, я считаю, что имеет смысл добавить этот код отдельно от класса виджета.

    И мне также нужно, чтобы он работал, когда я вызываю этот виджет с функцией the_widget(), например. внутри страницы. Я не знаю, как я могу получить параметры виджета, чтобы передать их в код javascript…

    Эта функция принимает массив экземпляров с данными виджета. Я не уверен в вашей специфике, но я думаю, что вы можете передать туда все, что вам нужно.

    Виджет, вызываемый напрямую, не имеет данных, кроме переданных в экземпляре (или извлеченных сам по себе).

    • 0

Оставить ответ

You must login to add an answer.