Показаны сообщения с ярлыком php. Показать все сообщения
Показаны сообщения с ярлыком php. Показать все сообщения

пятница, 4 сентября 2009 г.

Учим сниппет FeedX работать через SSL

На днях по работе столкнулся с необходимостью забирать XML с веб-сервиса, парсить его и показывать на сайте. Так как разработка идёт на MODx, то сразу же решил, что для этой задачи буду пользоваться сниппетом FeedX - готовое решение, которое, к тому же неплохо себя зарекомендовало на других проектах. И всё бы ничего, если бы не одно "но". Веб-сервис, с которым предстояло работать, функционирует через SSL протокол, а FeedX его не понимает.

После беглого поиска выяснилось, что с такой задачей либо никто не сталкивался, либо пожадничал делиться решением :) Так или иначе решения я не нашёл и принялся писать своё. Так как ничего особо сложного в нём нет, то и разжёвывать ничего не буду. Берите и пользуйтесь :)

  1. Модифицируем код сниппета и добавляем в него ещё один параметр - &ssl:
    $params['ssl'] = isset($ssl) ? intval($ssl) : 0;
    // Set &ssl to 1 for SSL support
  2. Далее редактируем feedx.class.inc.php. В строке 275 находим
    // Retrieve and parse feed
    if (function_exists('curl_init'))
    {
    // Use curl to retrieve feed
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $this->config['url']);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_HEADER, false);
    curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, $this->config['timeout']);
    $xml = curl_exec($curl);
    if (curl_errno($curl) !== 0) $success = false; // An error occured
    curl_close($curl);
    }
    и меняем на
    // Retrieve and parse feed
    if (function_exists('curl_init'))
    {
    if ($this->config['ssl']==1) {
    // Use SSL cURL call to retrieve feed
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_TIMEOUT, 10);
    curl_setopt($curl, CURLOPT_URL,$this->config['url']);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);
    curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
    $xml=curl_exec ($curl);
    if (curl_errno($curl) !== 0) $success = false; // An error occured
    curl_close ($curl);
    } else {
    // Use curl to retrieve feed
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $this->config['url']);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_HEADER, false);
    curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, $this->config['timeout']);
    $xml = curl_exec($curl);
    if (curl_errno($curl) !== 0) $success = false; // An error occured
    curl_close($curl);
    }
    }

Вот и всё! Теперь при вызове FeedX-а просто укажите в параметрах &ssl=`1` и сниппет отработает через SSL протокол.

пятница, 17 августа 2007 г.

HTML & JavaScript: Как сделать свои radiobutton при помощи AJAX

Вас устраивают стандартные радиокнопки? Если также, как и меня-нет, то вот простое решение-заменим их на картинки. Это позволит нам с лёгкостью подгонять радиокнопки под любой дизайн сайта. Ну что, поехали:

<script language="javascript">
// Эту функцию я использую всегда во всех скриптах.
// Она решает вопрос поиска объекта по id во всех броузерах.
function getElement(aID){
return (document.getElementById) ? document.getElementById(aID) : document.all[aID];
}
function SwitchRadio(liObj,Id){
// Получаем id нужного списка радиокнопок <ul>
var ulName=liObj.parentNode.id;
// Получаем массив со всеми элементами <li>, входящими в наш список
var orderedNodes = getElement(ulName).getElementsByTagName("li");
// Переключаем все кнопки в положение "выключено"
for (i=0; i<orderedNodes.length; i++){
orderedNodes[i].style.background="url(images/radio_off.gif) 0 2px no-repeat";
}
// Теперь включаем нашу кнопку...
liObj.style.background="url(images/radio_on.gif) 0 2px no-repeat";
// ...и передаём через ajaxagent её данные PHP-скрипту,
// который запишет их в сессию.
agent.call("aa_func.php", "AA_SaveFieldValue", "callback_SaveFieldValue", ulName, Id);
</script>
}

В коде страницы пишем что-то типа этого:

<ul id="Q1" class="questionsUL">
<li onClick="javascript:SwitchRadio(this,'1')">Вариант 1</li>
<li onClick="javascript:SwitchRadio(this,'2')">Вариант 2</li>
<li onClick="javascript:SwitchRadio(this,'3')">Вариант 3</li>
</ul>

А в стилях:

.questionsUL {
padding: 0;
margin: 0 0 0 20px;
}
.questionsUL li {
list-style: none;
margin: 0;
padding: 0;
background: url(images/radio_off.gif) 0 2px no-repeat;
padding: 0 0 5px 20px;
margin: 0;
cursor: pointer;
}

radio_on.gif и radio_off.gif - это наша кнопка. Соответственно включённая и выключенная. Стили прописаны для картинки с кнопкой размерами 10x10 пикселей.