ГлавнаяПрофильНовостиРекомендоватьОбратная связь
 
Kasseler CMS - Система управления сайтом
 
Новая тема Список форумов Kasseler CMS - Система управления сайтом » JavaScript  
Блок "Новости" на AJAX

FriZZ
Добавлено: 25.12.2007 10:56:14   Заголовок сообщения: Блок #1



Група: Support
Сообщений: 38
Пользователь №: 12
Спасибо сказали: 0 раз(а)
Дата регистрации: 14.12.2007
Место жительства: Украина, Киев. )
Статус: Offline
В общем хочу создать блок на технологии Ajax, который будет выводить новости. При нажатии на кнопку, ajax'ом новости можно будет листать.
В общем блок такой как на http://bigmir.net.
По центру, вверху.

Прошу помощи в его написании...помоги с чего начать, плиз, а дальше я сам постараюсь ))


Последний раз редактировалось: 25.12.2007 17:43:01
Вернуться к началу Пожаловаться на это сообщение Сказать спасибо
Профиль Личное сообщениеЦитата
Robin
Добавлено: 25.12.2007 17:46:54   Заголовок сообщения: #2



Група: Administrator
Возраст: 21
Сообщений: 516
Пользователь №: 1
Спасибо сказали: 4 раз(а)
Дата регистрации: 25.11.2007
Статус: Offline
Качаешь JS класс для работы с ajax.
Создаешь файл index.php.
С таким содержанием:
CODE
<?php
    echo "<script language="javascript" src="kr_ajax.js"></script>";
    echo "
        <script language="javascript">
            var news_id = 1;
            function next_news(){
                news_id++;
                // Создаем объект класса
                var ajax = new kr_ajax();
                //URL к файлу обработчику
                ajax.RequestFile = 'ajax.php';
                // Отключить анимацию выполнения аякса
                ajax.animload=false;
                // Устанавливаем переменные для передачи
                ajax.set_var('news_id', news_id);
                // ID контейнера куда вернется результат от сервера
        ajax.element='block_news';
        // Отправка запроса
        ajax.send_ajax('');
            }
            function back_news(){
                news_id--;
                var ajax = new kr_ajax();
                ajax.RequestFile = 'ajax.php';
                ajax.animload=false;
                ajax.set_var('news_id', news_id);
        ajax.element='block_news';
        ajax.send_ajax('');
            }
        </script>
    ";
    echo "<table width="165" height="200" style="border: 1px #F1F1F1 solid;">
        <tr><td align="center">title</td><td align="right"><a href="#" onclick="back_news(); return false;"><<</a> <a href="#" onclick="next_news(); return false;">>></a></td></tr>
        <tr><td align="center" colspan="2"><div id="block_news">News</div></td></tr>
    </table>";
?>


Потом рядом создаешь файл ajax.php
С таким содержанием:
CODE
<?php
   echo "News".$_POST['news_id'];
?>

В ajax классе реализованы следующие методы:
ajax.onstartload(){} – по умолчанию пустой и выполняется перед началом работы ajax-а
ajax.onendload = function(){} - по умолчанию пустой и выполняется после ответа от сервера на запрос ajax-а
ajax.set_var(name_var, value_var) – создает переменные для передачи запросом и также устанавливает их значения.
И так же имеются следующие переменные:
ajax.result - В эту переменную заносится результат запроса.
ajax.RequestFile - URL к файлу обработчику
ajax.method – Метод передачи данных (по умолчанию равен значению 'POST')
ajax.URLString – предназначена для занесения переменных которые передаются вместе с запросом
ajax.element - ID контейнера куда вернется результат от сервера
ajax.elementObj - Контейнер куда вернется результат от сервера
ajax.add – управляет методом размещения результата ответа в контейнер (по умолчанию false – все содержимое контейнера будет заменено. Если ture будет добавлено к уже существующему содержанию контейнера)
ajax.typeadd – тип добавления результата в контейнер – параметры DESC и ASC
ajax.animload = Включить/выключить анимацию выполнения ajax-а

Вот в принципе и все только в ajax.php запихиваешь любой код хоть HTML хоть PHP или запросы к БД. На твое усмотрение.


Последний раз редактировалось: 25.12.2007 17:59:34
Вернуться к началу Пожаловаться на это сообщение Сказать спасибо
Профиль Личное сообщениеЦитата
Rado
Добавлено: 25.12.2007 18:16:12   Заголовок сообщения: #3


Возраст: 25
Сообщений: 3
Пользователь №: 29
Спасибо сказали: 0 раз(а)
Дата регистрации: 25.12.2007
Статус: Offline
Robin - спасибо!
Вернуться к началу Пожаловаться на это сообщение Сказать спасибо
Профиль Личное сообщениеЦитата
FriZZ
Добавлено: 26.12.2007 08:21:56   Заголовок сообщения: #4



Група: Support
Сообщений: 38
Пользователь №: 12
Спасибо сказали: 0 раз(а)
Дата регистрации: 14.12.2007
Место жительства: Украина, Киев. )
Статус: Offline
Robin, спасибо большое ))
Только у меня 1 вопрос возник...

В фале ajax.php

CODE
$sql = ("SELECT news_id, title, text, time FROM prefix_news ORDER BY time");
while (list($news_id , $title, $text, $time) = $db->sql_fetchrow($result)) {
  
  $News = "$hometext";

   echo "$News".$_POST['news_id'];
}


Так ?

Только я все равно не шарю вот что:

В блоке как вывести $title и $news ?

В общем я запутался между самим файлом и файлом-обработчиком...)
Вернуться к началу Пожаловаться на это сообщение Сказать спасибо
Профиль Личное сообщениеЦитата
Robin
Добавлено: 26.12.2007 11:25:16   Заголовок сообщения: #5



Група: Administrator
Возраст: 21
Сообщений: 516
Пользователь №: 1
Спасибо сказали: 4 раз(а)
Дата регистрации: 25.11.2007
Статус: Offline
Ну в принципе так. Но только это не рабочий код явно, ты выложил
Титл новости аналогично.
Для общей красоты создаешь шаблон блока у которого нету родного титла в документации описано как это сделать, далее у нас как ты видел есть контейнер
CODE
<div id="block_news"></div>

В который возвращается результат ajax-а, если мы весь этот код:
CODE
 echo "<table width="165" height="200" style="border: 1px #F1F1F1 solid;">
        <tr><td align="center">title</td><td align="right"><a href="#" onclick="back_news(); return false;"><<</a> <a href="#" onclick="next_news(); return false;">>></a></td></tr>
        <tr><td align="center" colspan="2"><div id="block_news">News</div></td></tr>
    </table>";

в index.php заменим на:
CODE
echo "<div id="block_news"><table width="165" height="200" style="border: 1px #F1F1F1 solid;">
        <tr><td align="center">title</td><td align="right"><a href="#" onclick="back_news(); return false;"><<</a> <a href="#" onclick="next_news(); return false;">>></a></td></tr>
        <tr><td align="center" colspan="2">News</td></tr>
    </table></div>";

а в файле ajax.php сделаем замену всего кода на:
CODE
<?php
echo "<table width="165" height="200" style="border: 1px #F1F1F1 solid;">
        <tr><td align="center">title".$_POST['news_id']."</td><td align="right"><a href="#" onclick="back_news(); return false;"><<</a> <a href="#" onclick="next_news(); return false;">>></a></td></tr>
        <tr><td align="center" colspan="2">News".$_POST['news_id']."</td></tr>
    </table>";
?>

Таким образом ты будешь получать в блок каждый раз новый титл и новую новость.
Данный код не тестировал но должен работать.


Последний раз редактировалось: 26.12.2007 11:28:47
Вернуться к началу Пожаловаться на это сообщение Сказать спасибо
Профиль Личное сообщениеЦитата
FriZZ
Добавлено: 26.12.2007 20:48:40   Заголовок сообщения: Ajax block-News#6



Група: Support
Сообщений: 38
Пользователь №: 12
Спасибо сказали: 0 раз(а)
Дата регистрации: 14.12.2007
Место жительства: Украина, Киев. )
Статус: Offline
Попробовал поставить блок на свой студентег - не работает ((

Вот содержание файлов:

Block-News.php
CODE
<?php
if (!defined('BLOCK_FILE')) {
Header("Location: ../index.php");
exit;
}


    $content .= "<script language="javascript" src="/javascripts/ajax.js"></script>";
    $content .= "
        <script language="javascript">
            var news_id = 1;
            function next_news(){
                news_id++;
                
                var ajax = new kr_ajax();
              
                ajax.RequestFile = 'ajax.php';
              
                ajax.animload=false;
              
                  ajax.set_var('news_id', news_id);
              
             ajax.element='block_news';
            
             ajax.send_ajax('');
            }
            function back_news(){
                news_id--;
                var ajax = new kr_ajax();
                ajax.RequestFile = 'ajax.php';
                ajax.animload=false;
                  ajax.set_var('news_id', news_id);
             ajax.element='block_news';
             ajax.send_ajax('');
            }
        </script>
    ";
   $content .= "<div id="block_news"><table width="165" height="200" style="border: 1px #F1F1F1 solid;">
        <tr><td align="center">$title</td><td align="right"><a href="#" onclick="back_news(); return false;"><<</a> <a href="#" onclick="next_news(); return false;">>></a></td></tr>
        <tr><td align="center" colspan="2">$News</td></tr>
    </table></div>";
?>


ajax.php
CODE

<?php
$result = $db->sql_query("SELECT title, sid, hometext FROM `slaed_stories` ");
while (list($title , $news_id, $News) = $db->sql_fetchrow($result)) {
  

echo "<table width="165" height="200" style="border: 1px #F1F1F1 solid;">
        <tr><td align="center">$title".$_POST['$news_id']."</td><td align="right"><a href="#" onclick="back_news(); return false;"><<</a> <a href="#" onclick="next_news(); return false;">>></a></td></tr>
        <tr><td align="center" colspan="2">$News".$_POST['$news_id']."</td></tr>
    </table>";

   }
?> 


Блок ничего не выводит......пустым стоит. (




Последний раз редактировалось: 26.12.2007 20:49:14
Вернуться к началу Пожаловаться на это сообщение Сказать спасибо
Профиль Личное сообщениеЦитата
Robin
Добавлено: 26.12.2007 21:02:20   Заголовок сообщения: #7



Група: Administrator
Возраст: 21
Сообщений: 516
Пользователь №: 1
Спасибо сказали: 4 раз(а)
Дата регистрации: 25.11.2007
Статус: Offline
CODE
 $result = $db->sql_query("SELECT title, sid, hometext FROM `slaed_stories` ");
   while (list($title , $news_id, $News) = $db->sql_fetchrow($result)) {


запрос работать не будет
Вернуться к началу Пожаловаться на это сообщение Сказать спасибо
Профиль Личное сообщениеЦитата
FriZZ
Добавлено: 27.12.2007 09:53:59   Заголовок сообщения: #8



Група: Support
Сообщений: 38
Пользователь №: 12
Спасибо сказали: 0 раз(а)
Дата регистрации: 14.12.2007
Место жительства: Украина, Киев. )
Статус: Offline
Упс....точно...забыл )))

В общем запрос я исправил.Работает.
Ajax тож работает, выводит.
Только выводит не то что надо )
В общем у меня такое дело:

С тем кодом, который я давал выше - при нажатии на кнопку блок выводил не 1 новость, а все новости, которые только были.
Я поставил в запрос LIMIT.
Блок выводит 1 новость.Последнюю добавленную.
Однако при нажатии на кнопку он новости не листает, а просто обновляет одну и ту же (последнюю добавленую) новость.
Как с этим бороться ?
Вот содержание файлов:
block-News.php
CODE
<?php
if (!defined('BLOCK_FILE')) {
Header("Location: ../index.php");
exit;
}


    $content .= "<script language="javascript" src="/javascripts/ajax.js"></script>";
    $content .= "
        <script language="javascript">
            var news_id = 1;
            function next_news(){
                news_id++;
                var ajax = new kr_ajax();
                ajax.RequestFile = 'ajax.php';
                ajax.animload=false;
                  ajax.set_var('news_id', news_id);
             ajax.element='block_news';
             ajax.send_ajax('');
            }
            function back_news(){
                news_id--;
                var ajax = new kr_ajax();
                ajax.RequestFile = 'ajax.php';
                ajax.animload=false;
                  ajax.set_var('news_id', news_id);
             ajax.element='block_news';
             ajax.send_ajax('');
            }
        </script>
    ";
   $content .= "<div id="block_news"><table width="165" height="200" style="border: 1px #F1F1F1 solid;">
        <tr><td align="center">$title</td><td align="right"><a href="#" onclick="back_news(); return false;"><<</a> <a href="#" onclick="next_news(); return false;">>></a></td></tr>
        <tr><td align="center" colspan="2">$News</td></tr>
    </table></div>";
    

?>


ajax.php

CODE

<?php

define("FUNC_FILE", true);
require_once("function/mysql.php");

global $db, $prefix, $conffi, $hometext;
$news_id = "news_id";
$result = $db->sql_query("SELECT title, hometext, time FROM ".$prefix."_stories WHERE sid='$news_id' ORDER BY time LIMIT 1");
           while (list($title , $News, $time) = $db->sql_fetchrow($result)) {
  
       echo "<table width="165" height="200" style="border: 1px #F1F1F1 solid;">
        <tr><td align="center">$title</td><td align="right"><a href="#" onclick="back_news(); return false;"><<</a> <a href="#" onclick="next_news(); return false;">>></a></td></tr>
        <tr><td align="center" colspan="2">$News</td></tr>
    </table>";
   }
       
?[/b]>


Меня волнует эта строчка:
CODE
$news_id = "news_id";

Не знаю, как правильно с файла передать значение сюда.

И ещё одна проблема вылезла:

Если обращаться к файлу ajax.php напрямую - то всё работает нормально, а если через блок ajax'ом, то русский текст отображается как "???", в общем проблема с кодировкой.


Последний раз редактировалось: 27.12.2007 09:55:57
Вернуться к началу Пожаловаться на это сообщение Сказать спасибо
Профиль Личное сообщениеЦитата
Robin
Добавлено: 27.12.2007 10:18:15   Заголовок сообщения: #9



Група: Administrator
Возраст: 21
Сообщений: 516
Пользователь №: 1
Спасибо сказали: 4 раз(а)
Дата регистрации: 25.11.2007
Статус: Offline
замени
CODE
$news_id = "news_id";

на
CODE
$news_id = $_POST['$news_id'];


и в ajax.php

добавь
CODE
@header("Content-type: text/html; charset=windows-1251");
Вернуться к началу Пожаловаться на это сообщение Сказать спасибо
Профиль Личное сообщениеЦитата
FriZZ
Добавлено: 27.12.2007 10:28:37   Заголовок сообщения: #10



Група: Support
Сообщений: 38
Пользователь №: 12
Спасибо сказали: 0 раз(а)
Дата регистрации: 14.12.2007
Место жительства: Украина, Киев. )
Статус: Offline
ID всё равно не передаёт. ((

Когда вставил:
CODE
$news_id = $_POST['$news_id'];

В блоке вообще пусто.Ничего не выводит.

Если значение переменной $news_id вписать вручную - всё работает.
Где подвох ? ))

P.S.: Нашел баг на форуме...))) Точнее не на форуме, а в редакторе текстовом.
В общем "Предварительный просмотр".
Когда пост длинный, то при предварительно просмторе нельзя просмотреть весь текст.
Нету скролла и окно не меняет габариты.)))


Последний раз редактировалось: 27.12.2007 10:32:15
Вернуться к началу Пожаловаться на это сообщение Сказать спасибо
Профиль Личное сообщениеЦитата
Robin
Добавлено: 27.12.2007 11:51:40   Заголовок сообщения: #11



Група: Administrator
Возраст: 21
Сообщений: 516
Пользователь №: 1
Спасибо сказали: 4 раз(а)
Дата регистрации: 25.11.2007
Статус: Offline
Для проверки можно в ajax.php влепить такой код
CODE
<?php
echo $_POST['$news_id'];
?>

если ид будет передаваться то аякс опять же работает, а запрос возможно не выполняется потому что новости с таким идом нету
Вернуться к началу Пожаловаться на это сообщение Сказать спасибо
Профиль Личное сообщениеЦитата
FriZZ
Добавлено: 27.12.2007 11:58:31   Заголовок сообщения: Хмм...#12



Група: Support
Сообщений: 38
Пользователь №: 12
Спасибо сказали: 0 раз(а)
Дата регистрации: 14.12.2007
Место жительства: Украина, Киев. )
Статус: Offline
Нефига не понимаю...

Содержание ajax.php
CODE
<?php
echo $_POST['$news_id'];
?> 

И нефига он не выводит вообще.....пусто....
Мистика ? ))

Если в ajax.php вписать это:
CODE
<?php
echo "test";
?> 

то при нажатии на кнопку в блоке - появляется надпись "test".

Тоесть это что-то с $_POST['$news_id']...мож в блоке ошибка ?
Выкладываю код блока:
CODE
<?php
if (!defined('BLOCK_FILE')) {
Header("Location: ../index.php");
exit;
}


    $content .= "<script language="javascript" src="/javascripts/ajax.js"></script>";
    $content .= "
        <script language="javascript">
            var news_id = 1;
            function next_news(){
                news_id++;
                
                var ajax = new kr_ajax();
               
                ajax.RequestFile = 'ajax.php';
           
                ajax.animload=false;
              
                  ajax.set_var('news_id', news_id);
                
             ajax.element='block_news';
          
             ajax.send_ajax('');
            }
            function back_news(){
                news_id--;
                var ajax = new kr_ajax();
                ajax.RequestFile = 'ajax.php';
                ajax.animload=false;
                  ajax.set_var('news_id', news_id);
             ajax.element='block_news';
             ajax.send_ajax('');
            }
        </script>
    ";
   $content .= "<div id="block_news"><table width="165" height="200" style="border: 1px #F1F1F1 solid;">
        <tr><td align="center">$title</td><td align="right"><a href="#" onclick="back_news(); return false;"><<</a> <a href="#" onclick="next_news(); return false;">>></a></td></tr>
        <tr><td align="center" colspan="2">$News</td></tr>
    </table></div>";
    

?>





Последний раз редактировалось: 27.12.2007 12:03:09
Вернуться к началу Пожаловаться на это сообщение Сказать спасибо
Профиль Личное сообщениеЦитата
Robin
Добавлено: 27.12.2007 13:11:57   Заголовок сообщения: #13



Група: Administrator
Возраст: 21
Сообщений: 516
Пользователь №: 1
Спасибо сказали: 4 раз(а)
Дата регистрации: 25.11.2007
Статус: Offline
ну да я там немного прогнал а ты не испарил
вот
CODE
echo $_POST['$news_id']; 

не правильно
а вот этот кусок вполне правильный.
CODE
echo $_POST['news_id'];

ты же передаешь ПОСТ запрос вот значит так
CODE
$_POST['$news_id']

ты его не словишь на сервере
Вернуться к началу Пожаловаться на это сообщение Сказать спасибо
Профиль Личное сообщениеЦитата
FriZZ
Добавлено: 27.12.2007 14:24:20   Заголовок сообщения: #14



Група: Support
Сообщений: 38
Пользователь №: 12
Спасибо сказали: 0 раз(а)
Дата регистрации: 14.12.2007
Место жительства: Украина, Киев. )
Статус: Offline
О, заработал!

Наконец-то ))

Спасибо огромное )))))
Вернуться к началу Пожаловаться на это сообщение Сказать спасибо
Профиль Личное сообщениеЦитата
fargus
Добавлено: 29.12.2007 19:27:05   Заголовок сообщения: #15


Возраст: 20
Сообщений: 24
Пользователь №: 18
Спасибо сказали: 0 раз(а)
Дата регистрации: 20.12.2007
Статус: Offline
Нацайника ты себе ето паставил!
если да пришли куда и что ставить!
_________________________________

Ойсекю:496-647-7 один 4
Вернуться к началу Пожаловаться на это сообщение Сказать спасибо
Профиль Личное сообщениеЦитата
Список форумов Kasseler CMS - Система управления сайтом » JavaScript
 
Новая тема
Страница: 1 из 1 Вы можете просматривать темы
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать сообщения
Вы не можете удалять сообщения
Вы не можете модерировать этот форум

 
Страница сгенерирована за 0.204 секунд и 13 запросов к базе данных за 0.00864 секунд Web site engine code is Copyright © 2007-2008 by Kasseler CMS. All rights reserved.
Участник проекта CMS Magazine Rambler's Top100