Здесь, также как и при инициализации, мы просто...

Здесь, также как и при инициализации, мы просто указываем имена соответствующих методов. Рассмотрим, как они работают.

class Flickr_Widget {  private static $APP_NAME = ‘Flickr_Widget’;  private static $APP_KEY = ‘17e73e544f0f6fff4d06822668e76e01′; …  function activate() {  //устанавливаем начальные значения  $data['fw_app_name'] = Flickr_Widget::$APP_NAME;  $data['fw_app_key'] = Flickr_Widget::$APP_KEY;  $data['wf_images'] = ‘2′; //две картинки  $data['fw_size'] = ‘2′; //размер не более 100px по большей стороне  $data['wf_tags'] = ‘nature, природа’;  //и создаем опцию  add_option(‘fw_data’, $data);  }    function deactivate() {  //удаляем опцию  delete_option(‘fw_data’);  } } * This source code was highlighted with Source Code Highlighter.

При активации виджета мы формируем массив с настройками по-умолчанию и сохраняем его в опции fw_data (с помощью метода add_option). Обратите внимание на использовании атрибутов класса ($APP_NAME и $APP_KEY). При вызове методов WordPress не создает экземпляр класса, поэтому для обращения к свойствам нужно указывать имя класса. При деактивации виджета мы удаляем опцию. Все настройки при этом будут удалены. Теперь напишем метод создания панели управления виджетом.

class Flickr_Widget { …  private static $IMG_SIZES = array(  ’1′=>array(’s’,'75 x 75 px’)  , ‘2′=>array(‘t’,'max 100 px’)  , ‘3′=>array(‘m’,'max 240 px’)  , ‘4′=>array(”,’max 500 px’)  ); …  function control() {    //если пришли данные в массиве $_POST, обновляем опцию  if (isset($_POST['wf_images'])){  $data['fw_app_name'] = Flickr_Widget::$APP_NAME;  $data['fw_app_key'] = Flickr_Widget::$APP_KEY;  $data['wf_images'] = esc_attr($_POST['wf_images']);  $data['fw_size'] = esc_attr($_POST['fw_size']);  $data['wf_tags'] = esc_attr($_POST['wf_tags']);  update_option(‘fw_data’, $data);  }    //читаем данные, сохраненные в опции  $data = get_option(‘fw_data’);  if ( FALSE === $data ) {  //заполняем массив $data значениями по-умолчанию  $data = array();  $data['wf_images'] = ”;  $data['fw_size'] = ”;  $data['wf_tags'] = ”;  }  //создаем поля формы, которая будет показана в панели управления ?>  <p><label>Количество картинок <input name=”wf_images”  type=”text” value=”<?php echo $data['wf_images']; ?>” /></label></p>  <p><label>Размер картинок <select size=”1″ name=”fw_size”> <?php  foreach ( Flickr_Widget::$IMG_SIZES as $i => $size ) {  $selected = ”;  if ( $i == $data['fw_size'] ) {  $selected = ’selected=”selected”‘;  } ?>  <option value=”<?php echo $i; ?>” <?php echo $selected; ?>><?php echo $size['1']; ?></option> <?php  } ?>  </select></label></p>  <p><label>Теги (через запятую) <input name=”wf_tags”  type=”text” value=”<?php echo $data['wf_tags']; ?>” /></label></p> <?php  } … } * This source code was highlighted with Source Code Highlighter.

В начале этого метода мы проверяем, не пришли ли данные, которые мы должны сохранить. Если в массиве $_POST есть поля, которые относятся к нашему виджету, то мы записываем их в массив и сохраняем в опции. После этого мы создаем форму и заполняем её значениями из опции. Точнее часть формы создает движок. Нам нужно только добавить поля ввода. Их у нас три. 1) Поле «Количество картинок». 2) Выпадающий список с размерами картинок. 3) Поле для ввода тегов. Примечание. При загрузке пользователем фотографий, Flickr создает несколько превьюшек разных размеров. Именно эти превьюшки мы и будем показывать в сайдбаре. Переходим к методу, формирующему сам виджет.

class Flickr_Widget { …  public function widget($args) {  echo $args['before_widget'];  //показываем заголовок виджета  echo $args['before_title'] . ‘Images from Flickr’ . $args['after_title'];  //читаем массив с опциями  if ( $data = get_option(‘fw_data’) ) {  //подключаем библиотеку для работы с XML-RPC  include_once (‘wp-includes/class-IXR. php’);    $client = new IXR_Client(Flickr_Widget::$flickr_url);  $params = array(‘api_key’=>$data['fw_app_key']  ,’tags’=>$data['wf_tags']  ,’per_page’=>$data['wf_images']  );  if ( !$client->query(‘flickr. photos. search’, $params) ) {  echo ‘Error: ‘.$client->getErrorCode().’:’.$client->getErrorMessage();  }  else {  $photos = $client->getResponse();  $xml = new SimpleXMLElement($photos);  foreach ($xml->photo as $photo) {  $url = ‘http://farm’.$photo['farm']  .’.static. flickr. com/’  .$photo['server'].’/’  .$photo['id'].’_’  .$photo['secret'];  $oUrl = ‘http://www. flickr. com/photos/’  .$photo['owner']  .’/’.$photo['id'];  if (” !== $data['fw_size']) {  $url.= ‘_’.Flickr_Widget::$IMG_SIZES[$data['fw_size']][0].’.jpg’;  }  else {  $url.= ‘.jpg’;  }  echo ‘<div class=”flickr_image”><a href=”‘.$oUrl.’” target=”_blank”><img src=”‘.$url.’” alt=”‘.$photo['title'].’” /></a></div>’;  }  }  }  else {  echo ‘No settings’;  }  echo $args['after_widget'];  } … } * This source code was highlighted with Source Code Highlighter.

Принцип работы следующий. 1) Выводим заголовок виджета. 2) Читаем опцию (с помощью функции get_option). Если опция найдена: 2.1) Загружаем класс для работы с XML-RPC. 2.2) Формируем и отправляем запрос на Flickr. 2.3) Если ответ получен, формируем ссылки для тегов img. Ответ от Flickr приходит в XML формате, и для его анализа мы используем библиотеку SimpleXML. Расписывать, как формируются ссылки я не буду, на

Понравилась статья? Получай обновления и будь всегда в курсе событий!
Подпишись на RSS или
blog comments powered by Disqus