Здесь, также как и при инициализации, мы просто указываем имена соответствующих методов. Рассмотрим, как они работают.
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. Расписывать, как формируются ссылки я не буду, на