Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: постраничная навигация без перезагрузки всей страницы..

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
сашаяц
Отправлено: 23 Сентября, 2015 - 14:17:22
Post Id


Новичок


Покинул форум
Сообщений всего: 15
Дата рег-ции: Авг. 2015  


Помог: 0 раз(а)




Помогите пожалуйста сделать это, без перезагрузки страницы...

Функция навигации
PHP:
скопировать код в буфер обмена
  1.  
  2.  //навигация
  3.  function  pagintion($pageyt,$pages_count){
  4.  
  5.     if($_SERVER['QUERY_STRING']){ // если есть параметры в запросе
  6.         foreach($_GET as $key => $value){
  7.             // формируем строку параметров без номера страницы... номер передается параметром функции
  8.            if($key != 'pageyt') $uri .= "{$key}={$value}&";
  9.         }  
  10.     }
  11.    
  12.     // формирование ссылок
  13.     $back = ''; // ссылка НАЗАД
  14.     $forward = ''; // ссылка ВПЕРЕД
  15.     $startpage = ''; // ссылка В НАЧАЛО
  16.     $endpage = ''; // ссылка В КОНЕЦ
  17.     $page2left = ''; // вторая страница слева
  18.     $page1left = ''; // первая страница слева
  19.     $page2right = ''; // вторая страница справа
  20.     $page1right = ''; // первая страница справа
  21.    
  22.     if($pageyt > 1){
  23.         $back = "<a class='nav_link' href='?{$uri}pageyt=" .($pageyt-1). "'><</a>";
  24.     }
  25.     if($pageyt < $pages_count){
  26.         $forward = "<a class='nav_link' href='?{$uri}pageyt=" .($pageyt+1). "'>></a>";
  27.     }
  28.     if($pageyt > 3){
  29.         $startpage = "<a class='nav_link' href='?{$uri}pageyt=1'>&laquo;</a>";
  30.     }
  31.     if($pageyt < ($pages_count - 2)){
  32.         $endpage = "<a class='nav_link' href='?{$uri}pageyt={$pages_count}'>&raquo;</a>";
  33.     }
  34.     if($pageyt - 2 > 0){
  35.         $page2left = "<a class='nav_link' href='?{$uri}pageyt=" .($pageyt-2). "'>" .($pageyt-2). "</a>";
  36.     }
  37.     if($pageyt - 1 > 0){
  38.         $page1left = "<a class='nav_link' href='?{$uri}pageyt=" .($pageyt-1). "'>" .($pageyt-1). "</a>";
  39.     }
  40.     if($pageyt + 2 <= $pages_count){
  41.         $page2right = "<a class='nav_link' href='?{$uri}pageyt=" .($pageyt+2). "'>" .($pageyt+2). "</a>";
  42.     }
  43.     if($pageyt + 1 <= $pages_count){
  44.         $page1right = "<a class='nav_link' href='?{$uri}pageyt=" .($pageyt+1). "'>" .($pageyt+1). "</a>";
  45.     }    
  46.     // формируем вывод навигации
  47.     echo '<div class="pagination">' .$startpage.$back.$page2left.$page1left.'<a class="nav_active">'.$pageyt.'</a>'.$page1right.$page2right.$forward.$endpage. '</div>';
  48.  
  49.  }
  50.   //навигация
  51.  


Контроллер
PHP:
скопировать код в буфер обмена
  1.  
  2. $perpage = 6; // кол-во товаров на страницу
  3.         if(isset($_GET['pageyt'])){
  4.             $pageyt = (int)$_GET['pageyt'];
  5.             if($pageyt < 1) $pageyt = 1;
  6.         }else{
  7.             $pageyt = 1;
  8.         }
  9. $home_rows = home_rows();
  10. $pages_count = ceil($home_rows / $perpage) ;
  11. if(!$pages_count) $pages_count = 1;
  12. if($pageyt > $pages_count) $pageyt = $pages_count;
  13.         $start_pos = ($pageyt - 1) * $perpage; // начальная позиция для запроса
  14. $home = home($start_pos, $perpage);
  15.  

Счет количества для обработки(модель)
PHP:
скопировать код в буфер обмена
  1.  
  2. function home_rows(){
  3.     $query = "( SELECT COUNT(goods_id)  as home_rows
  4.                 FROM goods
  5.                WHERE visible='1' AND magaz ='1')";
  6.     $res = mysql_query($query) or die(mysql_error());
  7.    
  8.     while($row = mysql_fetch_assoc($res)){
  9.  if($row['home_rows']) $home_rows = $row['home_rows'];
  10.      }
  11.    
  12.     return $home_rows;
  13. }
  14.  

модель
PHP:
скопировать код в буфер обмена
  1.  
  2. function home($start_pos, $perpage){
  3.     $query = "SELECT goods_id, name, img, price, kol_vo FROM goods
  4.                WHERE visible='1' AND magaz ='1' LIMIT $start_pos, $perpage";
  5.     $res = mysql_query($query) or die(mysql_error());
  6.    
  7.     $home = array();
  8.     while($row = mysql_fetch_assoc($res)){
  9.         $home[] = $row;
  10.     }
  11.    
  12.     return $home;
  13. }
  14.  
 
 Top
broshurkaplus
Отправлено: 23 Сентября, 2015 - 19:32:50
Post Id



Посетитель


Покинул форум
Сообщений всего: 354
Дата рег-ции: Янв. 2011  
Откуда: Пружаны Бресткая обл. Беларусь


Помог: 2 раз(а)




не очень понятно как вы хотите сделать это

если со сменой урл то както так
CODE (javascript):
скопировать код в буфер обмена
  1. $(document).on('click', 'на что нажимаем', function()
  2.         var url = $(this).attr('href');
  3.  
  4.         $.ajax({
  5.             url:     url,
  6.             success: function(data){
  7.                 $('куда ответ вставлем').html(data);
  8.             }
  9.         });
  10.         // меняется ссылка
  11.         if(url != window.location){
  12.             window.history.pushState(null, null, url);
  13.         }
  14.         // Предотвращаем дефолтное поведение
  15.         return false;
  16. })


а если без смены урла то просто вписывайте в нужное место, без if(url != window.location...

может это поможет
 
 Top
сашаяц
Отправлено: 23 Сентября, 2015 - 19:41:41
Post Id


Новичок


Покинул форум
Сообщений всего: 15
Дата рег-ции: Авг. 2015  


Помог: 0 раз(а)




broshurkaplus пишет:
не очень понятно как вы хотите сделать это

если со сменой урл то както так
CODE (javascript):
скопировать код в буфер обмена
  1. $(document).on('click', 'на что нажимаем', function()
  2.         var url = $(this).attr('href');
  3.  
  4.         $.ajax({
  5.             url:     url,
  6.             success: function(data){
  7.                 $('куда ответ вставлем').html(data);
  8.             }
  9.         });
  10.         // меняется ссылка
  11.         if(url != window.location){
  12.             window.history.pushState(null, null, url);
  13.         }
  14.         // Предотвращаем дефолтное поведение
  15.         return false;
  16. })


а если без смены урла то просто вписывайте в нужное место, без if(url != window.location...

может это поможет


у меня есть один код... но я не знаю как его дописать....
(Добавление)
Вот код.
.a = контент
.b = контент
.nav_link = кнопка переключения страницы навигации.


в данном случае при нажатии на кнопку с классом nav_link, происходит обновление контента там, где есть классы .a и .b но мне надо чтобы обновлялся еще и сам .nav_link... если делать его в блоке с контентом, то после второго нажатия обновляется страница...
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2.  
  3. $(function(){
  4.     AjaxContent.init({containerDiv:".a",contentDiv:".b"}).ajaxify_links(".nav_link");
  5. });
  6. var AjaxContent = function(){
  7.     var container_div = '';
  8.     var content_div = '';
  9.     return {
  10.         getContent : function(url){
  11.             $(container_div).animate({opacity:0}, //Прозрачность на 0
  12.                 function(){ // загружает контент с помощью ajax
  13.                     $('#gif_loader').show(); //показываем лоадер
  14.                     $(container_div).load(url+" "+content_div, //загружает только выбранную часть
  15.                         function(){
  16.                             $(container_div).animate({opacity:1}); //возвращает прозрачность обратно на  1
  17.                             $('#gif_loader').hide();  //скрываем лоадер при загрузке
  18.                         }
  19.                     );
  20.                 });
  21.         },
  22.         ajaxify_links: function(elements){
  23.             $(elements).click(function(e){
  24.                 e.preventDefault();
  25.                 AjaxContent.getContent(this.href);
  26.                 // return false; //предотвращает нажатие на ссылку
  27.             });
  28.         },
  29.         init: function(params){ //задает первоначальные настройки
  30.             container_div = params.containerDiv;
  31.             content_div = params.contentDiv;
  32.             return this; //выводит объект
  33.         }
  34.     };
  35. }();
  36.  
  37.  
  38.  
 
 Top
broshurkaplus
Отправлено: 23 Сентября, 2015 - 23:56:37
Post Id



Посетитель


Покинул форум
Сообщений всего: 354
Дата рег-ции: Янв. 2011  
Откуда: Пружаны Бресткая обл. Беларусь


Помог: 2 раз(а)




в смысле "после второго нажатия обновляется страница" ?
не видно/не понял откуда url берется.
вобщем если контейнер с кнопками навигации то у них data или что там есть, если ссылки то атрибут хреф, а тк знаешь на какую страницу переходишь то перепиши яваскриптом эти параметры.
или : 12345... нажимаем 2 => убери 1 и добавь 6
если в отдельном блоке, то возможно вернуть строку данных с любым разделителем контент*страницы, разбить и вставить части куда надо.
и по моему это короче
CODE (javascript):
скопировать код в буфер обмена
  1. $(document).on('click', '.nav_link', function(){
  2.         var url = $(this).attr('href'); // или чтото там ещё
  3.         $.ajax({
  4.             url:     url,
  5.             success: function(data){
  6.                 //разобъем data по разделителю
  7.                 //код...
  8.                 $('.b').html(data[0]); // или куда пишем
  9.                 $('.nav_link').html(data[1]); //или блок
  10.             }
  11.         });
  12.         // Предотвращаем дефолтное поведение
  13.         return false;
  14. })
 
 Top
сашаяц
Отправлено: 24 Сентября, 2015 - 10:53:29
Post Id


Новичок


Покинул форум
Сообщений всего: 15
Дата рег-ции: Авг. 2015  


Помог: 0 раз(а)




broshurkaplus пишет:
в смысле "после второго нажатия обновляется страница" ?
не видно/не понял откуда url берется.
вобщем если контейнер с кнопками навигации то у них data или что там есть, если ссылки то атрибут хреф, а тк знаешь на какую страницу переходишь то перепиши яваскриптом эти параметры.
или : 12345... нажимаем 2 => убери 1 и добавь 6
если в отдельном блоке, то возможно вернуть строку данных с любым разделителем контент*страницы, разбить и вставить части куда надо.
и по моему это короче
CODE (javascript):
скопировать код в буфер обмена
  1. $(document).on('click', '.nav_link', function(){
  2.         var url = $(this).attr('href'); // или чтото там ещё
  3.         $.ajax({
  4.             url:     url,
  5.             success: function(data){
  6.                 //разобъем data по разделителю
  7.                 //код...
  8.                 $('.b').html(data[0]); // или куда пишем
  9.                 $('.nav_link').html(data[1]); //или блок
  10.             }
  11.         });
  12.         // Предотвращаем дефолтное поведение
  13.         return false;
  14. })









хорошо.. не твой, не мой вариант не работают( появляется одна и та же ошибка...
ОШИБКИ
PHP:
скопировать код в буфер обмена
  1. Uncaught ReferenceError: followLink is not defined

PHP:
скопировать код в буфер обмена
  1. Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check http://xhr.spec.whatwg.org/

МОЙ ВАРИАНТ
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2.  
  3.     $(document).ready(function(){
  4.         $(document).on('click', ".nav_link", function(event)  {
  5.             event.preventDefault();
  6.             var url = $(this).attr("href");
  7.             $.ajax({
  8.                 type: "GET",
  9.                 url: $(this).attr("href"),
  10.                 success: function(msg) {
  11.                     $(".content").replaceWith(msg);
  12.                 }
  13.             });
  14.         });
  15.     });
  16.  

и да.. при нажатии на ссылку без перезагрузки страницы все изчезает.. просто белая страница..

(Отредактировано автором: 24 Сентября, 2015 - 10:56:18)

 
 Top
broshurkaplus
Отправлено: 24 Сентября, 2015 - 19:10:29
Post Id



Посетитель


Покинул форум
Сообщений всего: 354
Дата рег-ции: Янв. 2011  
Откуда: Пружаны Бресткая обл. Беларусь


Помог: 2 раз(а)




если уже определил переменную то url: url,
да напиши для проверки в обработчике
<?php
echo 'ok';
?>
если урл существует то должно работать, поставьте ссылку от корня
и replaceWith помоему заменяет, те вы хотите заменить на чтото, а html пишет html в указанный элемент
попробуте
 
 Top
сашаяц
Отправлено: 25 Сентября, 2015 - 09:13:27
Post Id


Новичок


Покинул форум
Сообщений всего: 15
Дата рег-ции: Авг. 2015  


Помог: 0 раз(а)




broshurkaplus пишет:
если уже определил переменную то url: url,
да напиши для проверки в обработчике
<?php
echo 'ok';
?>
если урл существует то должно работать, поставьте ссылку от корня
и replaceWith помоему заменяет, те вы хотите заменить на чтото, а html пишет html в указанный элемент
попробуте

работает... почти. изчезает блок content. не обновляется, а изчезает... точнее все его содержимое.. и заменяется все символом < или !



CODE (javascript):
скопировать код в буфер обмена
  1. ъ
  2.  
  3.   $(document).on('click', '.nav_link', function(){
  4.         var url = $(this).attr('href'); // или чтото там ещё
  5.         $.ajax({
  6.             url:     url,
  7.             success: function(data){
  8.                 //разобъем data по разделителю
  9.                 //код...
  10.                 $('.content').html(data[0]); // или куда пишем
  11.                
  12.             }
  13.         });
  14.         // Предотвращаем дефолтное поведение
  15.         return false;
  16. });
  17.  
  18.  

(Отредактировано автором: 25 Сентября, 2015 - 09:38:01)

 
 Top
broshurkaplus
Отправлено: 25 Сентября, 2015 - 12:21:01
Post Id



Посетитель


Покинул форум
Сообщений всего: 354
Дата рег-ции: Янв. 2011  
Откуда: Пружаны Бресткая обл. Беларусь


Помог: 2 раз(а)




гдето ошибки вывода/синтаксиса, посмотрите в браузере как выглядит то что вы печатаете

вывод как пример
сразу в массив
1 элемент <div>какойто html<div>
2 <a class="nav_link">1</a><a class="nav_link">2</a>
или уж проще
<div class="content>*<a class="nav_link">1</a><a class="nav_link">2</a> и тд
разбиваете по *
1 пишите в $('.content').html(data[0]);
2 пишите в $('туда где ссвлки стоят').html(data[1]);

пробуйте на простом, потом добавите функционал

сашаяц пишет:
точнее все его содержимое.. и заменяется все символом < или !

ну значит урл вам возвращает на печать < или !
 
 Top
сашаяц
Отправлено: 25 Сентября, 2015 - 22:20:40
Post Id


Новичок


Покинул форум
Сообщений всего: 15
Дата рег-ции: Авг. 2015  


Помог: 0 раз(а)




broshurkaplus пишет:
гдето ошибки вывода/синтаксиса, посмотрите в браузере как выглядит то что вы печатаете

вывод как пример
сразу в массив
1 элемент <div>какойто html<div>
2 <a class="nav_link">1</a><a class="nav_link">2</a>
или уж проще
<div class="content>*<a class="nav_link">1</a><a class="nav_link">2</a> и тд
разбиваете по *
1 пишите в $('.content').html(data[0]);
2 пишите в $('туда где ссвлки стоят').html(data[1]);

пробуйте на простом, потом добавите функционал

сашаяц пишет:
точнее все его содержимое.. и заменяется все символом < или !

ну значит урл вам возвращает на печать < или !













я нашел этот код.. и с ним все работает на ура.... только вот.. обновлять надо полностью все. ибо если в каком то диве, то подгружается абсолютно весь сайт в диве как будто 2 сайта в одном окне.

CODE (javascript):
скопировать код в буфер обмена
  1.  
  2.  
  3.  
  4. jQuery('document').ready(function(){
  5.  
  6.         jQuery('.nav_link').on('click', function(e){
  7.             e.preventDefault();
  8.             var href = $(this).attr('href');
  9.  
  10.             // Getting Content
  11.             getContent(href, true);
  12.  
  13.             jQuery('.historyAPI').removeClass('active');
  14.             $(this).addClass('active');
  15.         });
  16.  
  17.     });
  18.  
  19.     // Добавление слушателя события popstate для обработки браузере кнопку "назад"
  20. window.addEventListener("popstate", function(e) {
  21.  
  22.     // Получить значение состояния с использованием электронного.государство
  23.     getContent(location.pathname, false);
  24. });
  25.  
  26. function getContent(url, addEntry) {
  27.     $.get(url)
  28.         .done(function( data ) {
  29.  
  30.             // Updating Content on Page
  31.             $('body').html(data);
  32.  
  33.             if(addEntry == true) {
  34.                 // Add History Entry using pushState
  35.                 history.pushState(null, null, url);
  36.             }
  37.  
  38.         });
  39. };
  40.  
  41.  
  42.  
 
 Top
broshurkaplus
Отправлено: 25 Сентября, 2015 - 22:40:44
Post Id



Посетитель


Покинул форум
Сообщений всего: 354
Дата рег-ции: Янв. 2011  
Откуда: Пружаны Бресткая обл. Беларусь


Помог: 2 раз(а)




так тут же
$('body').html(data);
он и заменяте все в body
вы же хотите заменить содержимое блока с классом content

может у вас по уелевому урлу страница целиком формируется?

о вы уже код в 1 пост кинули, посмотрим...

у вас home() возвращает массив
нужно его в представлении разобрать и вернуть уже с html, который впишется в нужный див
$('.content').html(data);

проверьте - просто впишите в отдельный файл:
подключитесь к базе
$aaa='fffffffffffffffff';
echo $aaa;
и отправьте на этот урл в итоге в .content впишется 'fffffffffffffffff'

(Отредактировано автором: 25 Сентября, 2015 - 22:59:15)

 
 Top
сашаяц
Отправлено: 25 Сентября, 2015 - 23:05:41
Post Id


Новичок


Покинул форум
Сообщений всего: 15
Дата рег-ции: Авг. 2015  


Помог: 0 раз(а)




broshurkaplus пишет:
так тут же
$('body').html(data);
он и заменяте все в body
вы же хотите заменить содержимое блока с классом content

может у вас по уелевому урлу страница целиком формируется?

о вы уже код в 1 пост кинули, посмотрим...

у вас home() возвращает массив
нужно его в представлении разобрать и вернуть уже с html, который впишется в нужный див
$('.content').html(data);

проверьте - просто впишите в отдельный файл:
подключитесь к базе
$aaa='fffffffffffffffff';
echo $aaa;
и отправьте на этот урл в итоге в .content впишется 'fffffffffffffffff'


с этим я уже разобрался... теперь новая проблема... title.. как моем последнем коде сделать, чтобы еще и title обновлялся? работает все... но title обновляется если перезагрузить страницу на прямую... даже url вносится в адресную строку..
 
 Top
broshurkaplus
Отправлено: 25 Сентября, 2015 - 23:19:44
Post Id



Посетитель


Покинул форум
Сообщений всего: 354
Дата рег-ции: Янв. 2011  
Откуда: Пружаны Бресткая обл. Беларусь


Помог: 2 раз(а)




CODE (javascript):
скопировать код в буфер обмена
  1. history.pushState({title:nameLink, href:link.href}, null, link.href);

пробуйте, но вроде как title - этот параметр в настоящее время не используется основными браузерами. Попробуйте менять по другому:
вернули массив страница, меню, титл
чисто яваскрипт... добавьте
CODE (javascript):
скопировать код в буфер обмена
  1. var elm = document.getElementsByTagName('title')[0];
  2. elm.innerHTML = title;


вообще - зачем вам это? просто обновляете контент в блоке и все.

(Отредактировано автором: 25 Сентября, 2015 - 23:20:39)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB