Случайный node (материал) и все такое 2

Главные вкладки

Аватар пользователя daimyo daimyo 30 ноября 2007 в 18:58

Помница как то давненько хотелось мне сделать на своем сайте флеш игр (адрес в подписи) блок в котором отображалась бы случайная игра и чтоб неприменно можно было обновлять ее, не перегружая всю страницу. Вот линк на эту тему http://drupal.ru/node/8403
Там мне посоветовали использовать views так как в нем есть возможность создать блок со случайной выборкой node. Но меня он не полностью устраивал так как случайная выборка происходит только после перезагрузки страницы, что само собой не есть хорошо. Поэтому поиси продолжились Smile

И вот оно свершилось !! покапавшись немного в доках посвященных Ajax и поковырявшись в коде друпала , на моем сайте на главной странице появился таки блок с Случайной флеш игрой. и при нажатии на кнопку "Обновить" случайным образом выбирается картинка к игре и соответственно ссылка на нее.
Сделана эта красота с помошью упоминавшейся выше по тексту Ajax технологии и небольших запросиков к БД друпала.

Немного кода или как я это сделал:
Сразу хочу предупредить я не разибрался с этой технологией до конца, не копал в глубь, я просто добился того чего мне хотелось и все Smile то есть вполне возможно что профессионалам покажется мое повествование делитантским Smile Так оно и есть Smile

Главная страница у меня формируется из модуля Panels за сам блок "случайная флеш игра" отвечает опять таки специально созданный блок - "случайная игра" содеражние которого примерно следующее:

script type="text/javascript" src="functions.js">
table align=center border=0 width=100% background='bk_rand.jpg' >
tr height=30px>
td colspan=3 >
h1 class=randomnode>Случайная игра
/td>
/tr>

tr height=135>
td align=center>
div align=center class="dborder" id="dborder1" >
a href='/logicheskie/xray'>img class='img_rand' src='files/xray.jpg' width=120 height=120 />/a>
/div>
/td>
/tr>
tr align=center>
td>
div onclick="grabword ('dborder1')">
img class="reload" onmouseover='document.link1.src="reload_over.gif"' src='reload.gif' onmouseout='document.link1.src="reload.gif"' name='link1' id='link1'/>
/div>
/td>
/tr>
/table>
/em>

то есть при нажатии на картинку reload.gif будет вызываться функция grabword которой будет передаваться в качестве параметра dborder1 в который и будет вставляться найденная нами случайная картинка от игры Smile

вот содеражание самой функции functions.js
var xmlhttp = false;
try {
//If the javascript version is greater than 5.
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
//If not, then use the older active x object.
try {
//If we are using IE.
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (E) {
//Else we must be using a non-IE browser.
xmlhttp = false;
}
}
//If we are using a non-IE browser, create a javascript instance of the object.
if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
xmlhttp = new XMLHttpRequest();
}
//Function to run a word grabber script.
function grabword (theelement){
serverPage = "wordgrabber.php";
var obj = document.getElementById(theelement);
xmlhttp.open("POST", serverPage);
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
obj.innerHTML = xmlhttp.responseText;
}
}
xmlhttp.send(null);

}
как видно в этой функции производится обращение к файлу wordgrabber.php в котором собственно говоря и происходит обращение к моей БД , происходит выборка необходимых игр. вот к примеру что у меня:

header('Content-Type: text/html; charset=windows-1251');
require_once ("conect.php"); //подключение к БД
//Open the database.
$db = opendatabase();
$querystr = "select nid, tid from 1play_term_node where (tid<16) ORDER BY RAND() Limit 1";
if ($myquery = mysql_query ($querystr)){
$mydata = mysql_fetch_array ($myquery);
}else {
echo mysql_error();
}
$qyer = $mydata['nid'];
$tid = $mydata['tid'];
$querystr2 = "select `filepath` from `1play_files` where (`nid` = $qyer) and (`filename`<>'_flash') Limit 1";
if ($myquery2 = mysql_query ($querystr2)){
$mydata2 = mysql_fetch_array ($myquery2);
}
$news = $mydata2['filepath'];
echo ""; ?>

в результате выполнения этого скрипта мы получаем случайно найденную игру и картинку к ней . После чего выводим

a href='/node/$qyer'>img class='img_rand' src='$news' width=120 height=120 />/a

где $news это путь до картинки, а $qyer это соответственно nid игры .

ну вот и все Smile надеюсь хоть что то понятно

всем спасибо Smile

Комментарии

Аватар пользователя andypost@drupal.org andypost@drupal.org 1 декабря 2007 в 22:10

От друпала тут ничего и нет Smile
Проще сделать свой модуль
1) определить пункт меню
2) определить блок и его вывод
4) написать скрипт на jquery подтягивающий данные
3) написать обработчик меню выводящий нужные данные