Э.... на 1-й и второй странице дублирующийся контент? Представляю свое ох... когда прочитав 20 сообщений с 1-й страницы и перейдя на вторую я начну читать 19 тех же сообщений... Для поисковиков единственная удобоваримая схема - это нормальный стек новостей на несколько страниц и их архив с уже жесткой привязкой. Стек будет индексироваться по-разному постоянно, с другой стороны его вообще можно закрыть от индексации, отдав только архив.
Э... именно код или идею? Идею я уже сказал - дайте людям спокойно пролистать страницы (уж в каком направлении они нумерованы - это даже не так важно), а для поисковиков держите отдельный "архив", где есть строгая привязка к урлам. Код показать не могу. О том, как мы реализовали навигацию внешне... ну вот так:
ну, в принципе, можно анализировать хедеры и отдавать ботам другой контент, но как-то не_спортивно имхо.
дело было вечером, делать было нечего...получился простой пэйджер Я его не тестил по идее должен выдавать такую картинку [1][2]...[4][5][6][7][8]...[10][11] PHP: <? // $data - array ([page_num]=> кол-во публикаций на странице, [page_block]=>Кол во ссылок в среднем блоке) // $n - текущая страница вида 1,2,3,4 ... и тд // $tpl - это шаблон ссылки, например index.php?act=go&page= , тогда ссылка будет index.php?act=go&page=1, index.php?act=go&page=2 и тд // $all - всего публикрций function pager($data,$n,$tpl,$all) { $max=ceil($all/$data['page_num']); $ot=$n-2; if ($ot<=0)$ot=1; $po=$ot+$data['page_block']-1; if ($po>$max) $po=$max; $page=''; if ($po==$max) $ot=$po+1-$data['page_block']; if ($ot==2) $page.='...'; if ($ot>2) { $page.="<a href='".$tpl."1'>[1]</a>"; if ($ot>3) $page.="<a href='".$tpl."2'>[2]</a>"; $page.='...'; } for($i=$ot;$i<=$po;$i++) { if ($n==$i) { $page.="<b>[$i]</b>"; }else { $page.="<a href='".$tpl."$i'>[$i]</a>"; } } if ($po<=$max-2){ $page.='...'; $page.="<a href='".$tpl.$max."'>[$max]</a>"; if ($po<$max-2) $page.="<a href='".$tpl.($max-1)."'>[".($max-1)."]</a>"; } if ($po==$max-1) $page.='...'; return $page; } // вызов print pager(array('page_num'=>10,'page_block'=>6),$_GET['page'],'index.php?page=',173); ?>
начал тестить, нашёл ошибку.. PHP: <? function pager($data,$n,$tpl,$all) { $max=ceil($all/$data['page_num']); if ($max<=0) $max=1; $ot=$n-2; if ($ot<=0) $ot=1; $po=$ot+$data['page_block']-1; if ($po>$max) $po=$max; $page=''; if ($po==$max) $ot=$po+1-$data['page_block']; if ($ot<=0) $ot=1; if ($ot==2) $page.='...'; if ($ot>2) { $page.="<a href='".$tpl."1'>[1]</a>"; if ($ot>3) $page.="<a href='".$tpl."2'>[2]</a>"; $page.='...'; } for($i=$ot;$i<=$po;$i++) { if ($n==$i) { $page.="<b>[$i]</b>"; }else { $page.="<a href='".$tpl."$i'>[$i]</a>"; } } if ($po<=$max-2){ $page.='...'; if ($po<$max-2) $page.="<a href='".$tpl.($max-1)."'>[".($max-1)."]</a>"; $page.="<a href='".$tpl.$max."'>[$max]</a>"; } if ($po==$max-1) $page.='...'; return $page; } ?>
http://www.php.net/floor http://www.php.net/ceil десятичную часть сам проверишь? P.S. порнуху из подписи убери.
Доброго времени суток. Возникла проблемка, а именно: есть код (кхм! Не ругать, я неделю назад первый раз в жизни Код (Text): <?php написал): index.php : Код (Text): <?php include "inc/header.inc.php"; include "inc/config.inc.php"; include "form_search.php"; @mysql_select_db("search") or die("Невозможно соединится с базой данных!"); if (isset($p_header)) { if (@$p_header != NULL) { $find_name = $p_header; @mysql_query ( "SET NAMES UTF8" ); $query = "SELECT * FROM `searchdata` WHERE `header` LIKE '%$find_name%'"; $result = mysql_query($query); $x = 0; $num_rows = mysql_num_rows($result); if ( $num_rows == 0) { print "<center><h3>По вашему запросу ничего не найдено. Попробуйте изменить запрос.</h3></center>\n"; } else { while ($x < mysql_num_rows($result)) : //Рисуем всё найденное $Header = mysql_result($result, $x, 'header'); $Date = mysql_result($result, $x, 'add_date'); $Short_Story = mysql_result($result, $x, 'shortstory'); $Link = mysql_result($result, $x, 'links'); print "<font size=\"small\">$Header</font>"; print "<font size=\"smalest\">$Date</font><br>"; print "<font size=\"small\">$Short_Story</font>\n"; print "$Link\n"; $x++; endwhile; } mysql_close(); } } print "</body>\n"; print "</html>\n"; ?> в кратце: form_search.php отправляет через POST $p_header и по нему из базы делаем выборку. Естественно, для этого нужен постраничный просмотр. Я перепробовал все варианты (вот последний, не удивляйтесь, я уже пробовал все что можно поэтому тут такие "камменты"): Код (Text): <?php include "inc/header.inc.php"; include "inc/config.inc.php"; include "form_search.php"; @mysql_select_db("search") or die("Невозможно соединится с базой данных!"); if (empty($p_header)){ //if (empty($_get['header'])) { // $find_name = @$p_header; // } else { $find_name = $_get['header']; // $find_name = $p_header; } // @$GetHeader = $_get['header']; // if (isset($p_header)) { // if (@$p_header != NULL) { // $find_name = $p_header; echo "$find_name<br>"; // ============================================================== function link_bar($page, $pages_count, $find_name) { for ($j = 1; $j <= $pages_count; $j++) { // Вывод ссылки if ($j == $page) { echo ' <a style="color: #808000;" ><b>'.$j.'</b></a> '; } else { echo ' <a style="color: #808000;" href='.$_SERVER['PHP_SELF'].'?page='.$j.'&header='.$find_name.'>'.$j.'</a> '; } // Выводим разделитель после ссылки, кроме последней // например, вставить "|" между ссылками if ($j != $pages_count) echo ' '; } return true; } // Конец функции // Подключение к базе данных mysql_connect('localhost', 'wp_admin', 'fhntvbq') or die('error! Нет соединения с сервером mysql!'); mysql_select_db('search') or die('error! Нет соединения с базой данных!'); // Подготовка к постраничному выводу $perpage = 10; // Количество отображаемых данных из БД if (empty($_get['page']) || ($_get['page'] <= 0)) { $page = 1; } else { $page = (int) $_get['page']; // Считывание текущей страницы } // Общее количество информации $count = mysql_num_rows(mysql_query("SELECT * FROM `searchdata` WHERE `header` LIKE '%$find_name%'")) or die('error! Записей не найдено!'); $pages_count = ceil($count / $perpage); // Количество страниц // Если номер страницы оказался больше количества страниц if ($page > $pages_count) $page = $pages_count; $start_pos = ($page - 1) * $perpage; // Начальная позиция, для запроса к БД // Вызов функции, для вывода ссылок на экран link_bar($page, $pages_count, $find_name); // Вывод информации из базы данных echo '<p><b>Постраничный вывод информации</b></p>'; // ============================================================================== echo "\$perpage = $perpage<br>"; //проверка echo "\$start_pos = $start_pos<br>"; //порверка @mysql_query ( "SET NAMES UTF8" ); $query = "SELECT * FROM `searchdata` WHERE `header` LIKE '%$find_name%' LIMIT $start_pos, $perpage"; $result = mysql_query($query); $x = 0; // if (mysql_num_rows($result) == 0) { // print "<center><h3>По вашему запросу ничего не найдено. Попробуйте изменить запрос.</h3></center>\n"; // } else { while ($x < mysql_num_rows($result)) : //Рисуем всё найденное в табличку $Header = mysql_result($result, $x, 'header'); $Date = mysql_result($result, $x, 'add_date'); $Short_Story = mysql_result($result, $x, 'shortstory'); $Link = mysql_result($result, $x, 'links'); print "<font size=\"small\">$Header</font>"; print "<font size=\"smalest\">$Date</font><br>"; print "<font size=\"small\">$Short_Story</font>\n"; print "$Link\n"; $x++; // $find_name = $new_find_name; endwhile; // } mysql_close(); // } // } print "</body>\n"; print "</html>\n"; ?> так вот, все разбивается на страницы, но в ссылке, ведущей на вторую (третью, четвертую, etc) страницу через GET не передается переменная $header, потому что, как я понимаю, форма form_search.php ее "обнуляет". Самая проблема в том, что все это должно работать по принципу использующемуся в гугле: ввели данные в форму, отправили, обновилась страница, имеем вверху форму а снизу данные запроса, которые, если нужно, разбиваем на страницы. Ну не получается Либо 2-я страница уже пустая, либо на 2-й и последующей - данные те же, что и на первой. Подскажите варианты, если есть. плиз.
не передается Обновляется страница, подгружается форма: Код (Text): <?php include "inc/config.inc.php"; print "<div align='center'>\n"; print "<br />\n"; print "<img border=\"0\" src=\"http://www.google.com.ua/logos/holiday08_2.gif\"></img>\n"; print "<form action=\"index.php\" method=\"post\" target=\"_top\">\n"; print "<input type=text name=\"header\" maxlength=150 size=80><br>\n"; print "<input type=submit class=submit value=\"Search\">\n"; print "</form>\n"; print "</div>\n"; ?> и $header = "" Это так, как я себе понимаю сейчас...
Йоу!!! Заработала!!! Пришлось правда еще много править, но... karakh Огромнейшее вам человеческое спасибо
440Hz , Вы по сложнее нечего не придумали для новичков? :evil: Может быть оно и рабочее и работает лучше , но тут все так всё поняли
Когда 440hz это постил я был новичком (впрочем я и сейчас не гуру , но все понял и даже использовал местами
Зачем заниматься быдлокодингом если листинг класса опубликовали на пред странице (creage). Чуть поправил, убрал лишний код с его модулей. Вот, вставляйте и пользуйтесь. PHP: <? Class Scroller { public $itemsCount = 0, $limit, $pageCount, $currentPage, $currentPageNumber, $currentPageName, $offset, $direction, $firstPage, $lastPage, $formName; function Scroller($itemsCount, $itemsPerPage, $formName, $direction, $page = 0){ $this->formName = empty($formName) ? "page" : $formName; $this->page = empty($page) ? $_REQUEST[$this->formName] : $page; $this->itemsCount = (int)$itemsCount; $this->limit = (int)$itemsPerPage; $this->pageCount = ceil($this->itemsCount / $this->limit); if((int)$direction < 0){ $this->currentPage = !(int)$this->page && $this->page != "0" ? $this->pageCount : $this->page; if($this->currentPage > $this->pageCount){ $this->currentPage = $this->pageCount; } else { if($this->currentPage < 1) $this->currentPage = 1; } $this->currentPageNumber = $this->pageCount - $this->currentPage + 1; $this->currentPageName = $this->currentPageNumber; if($this->pageCount && $this->currentPage < $this->pageCount){ $this->isFullPage = $this->itemsCount % $this->limit ? 1 : 0; $this->offset = $this->itemsCount % $this->limit + ($this->pageCount - $this->currentPage - $this->isFullPage) * $this->limit; } else { $this->offset = 0; } $this->direction = "-1"; $this->firstPage = $this->pageCount; $this->lastPage = 1; } else { $this->currentPage = !(int)$this->page && $this->page != "0" ? 1 : $this->page; if($this->currentPage > $this->pageCount){ $this->currentPage = $this->pageCount; } else { if($this->currentPage < 1) $this->currentPage = 1; } $this->currentPageNumber = $this->currentPage; $this->currentPageName = $this->currentPage; $this->direction = "+1"; $this->firstPage = 1; $this->lastPage = $this->pageCount; $this->offset = $this->pageCount ? ($this->currentPage - 1) * $this->limit : 0; } } function show($params = 0){ $sReturn = ""; if($this->pageCount >1){ if(isset($params["mode"])) $this->mode = $params["mode"]; $this->navCount = (int)$params["navCount"] ? $params["navCount"] : 5; $this->firstNav = $this->currentPageNumber - floor($this->navCount / 2); if($this->firstNav < 1) $this->firstNav = 1; $this->lastNav = $this->firstNav + $this->navCount - 1; if($this->lastNav > $this->pageCount){ $this->lastNav = $this->pageCount; $this->firstNav = $this->lastNav - $this->navCount; if($this->firstNav < 1) $this->firstNav = 1; } $this->separator = isset($params["separator"]) ? $params["separator"] : "…"; $qupos = strpos($params["targetUrl"], "?"); $this->urlSeparator = $qupos !== false ? "&" : "?"; if(isset($params["tagName"])) $sReturn .= "<" . $params["tagName"] . " " . $params["tagAttr"] . " >"; $this->title = isset($params["title"]) ? $params["title"] : "Страницы: "; if($this->mode == "html"){ $sReturn .= $this->title; } else { $sReturn = "<title>" . $this->title . "</title>"; if(isset($params["leftDivider"])) $sReturn .= "<left-divider>" . $params["leftDivider"] . "</left-divider>"; if(isset($params["rightDivider"])) $sReturn .= "<right-divider>" . $params["rightDivider"] . "</right-divider>"; } if($this->currentPage != $this->firstPage){ $backName = isset($params["backName"]) ? $params["backName"] : "← Назад"; $sReturn .= $this->_printNavItem("back", $backName, $params["targetUrl"], $this->urlSeparator, $this->currentPage - $this->direction); if($this->mode == "html" && isset($params["leftDivider"])) $sReturn .= $params["leftDivider"]; } if($this->firstNav > 1){ $sReturn .= $this->_printNavItem("first", 1, $params["targetUrl"], $this->urlSeparator, $this->firstPage); if($this->firstNav > 2) $sReturn .= $this->_printNavItem("separator", $this->separator); } for ($i = $this->firstNav; $i <= $this->lastNav; $i++) { $current = ""; $ipage = $this->direction < 0 ? $this->pageCount - $i + 1 : $i; if($ipage == $this->currentPage) $current = "current"; $sReturn .= $this->_printNavItem($current, $i, $params["targetUrl"], $this->urlSeparator, $ipage); } if($this->lastNav < $this->pageCount){ if($this->lastNav < $this->pageCount - 1) $sReturn .= $this->_printNavItem("separator", $this->separator); $sReturn .= $this->_printNavItem("last", $this->pageCount, $params["targetUrl"], $this->urlSeparator, $this->lastPage); } if($this->currentPage != $this->lastPage){ if($this->mode == "html"){ $sReturn .= isset($params["rightDivider"]) ? $params["rightDivider"] : "|"; } $forwardName = isset($params["forwardName"]) ? $params["forwardName"] : "Дальше →"; $sReturn .= $this->_printNavItem("forward", $forwardName, $params["targetUrl"], $this->urlSeparator, $this->currentPage + $this->direction); } if(isset($params["tagName"])) $sReturn .= "</" . $params["tagName"] . " >"; } return $sReturn; } function _printNavItem($type, $name, $url = "", $urlSeparator = "", $pageNum = ""){ $sReturn = ""; if($this->mode == "html"){ if($type == "separator"){ $sReturn = "\n<span class=\"separator\">".$name."</span>\n"; } elseif($type != "current" && (int)$pageNum) { $sReturn .= "\n<a href=\""; $sReturn .= !empty($url) ? $url : "./"; if($pageNum != $this->firstPage) $sReturn .= $urlSeparator.$this->formName."=".$pageNum; $sReturn .= "\""; if(empty($type) || $type == "first" || $type == "last") $sReturn .= " class=\"scrollerPage\""; $sReturn .= ">".$name."</a>\n"; } else { $sReturn = "\n<span class=\"scrollerCurrentPage\">".$name."</span>\n"; } } else { $sReturn = "<page "; if(isset($type)) $sReturn .= 'type="'.$type.'" '; if($type != "current" && !empty($pageNum)){ $sReturn .= 'href="'; !empty($url) ? $sReturn .= $url : $sReturn .= "./"; if($pageNum != $this->firstPage) $sReturn .= $urlSeparator.$this->formName.'='.$pageNum; $sReturn .= '" num="'.$name.'" '; } $sReturn .= "/>"; } return $sReturn; } } //инициализация и вывод пэйджера $page=isset($_GET['page'])?$_GET['page']:1; // init scroller //1520-сколько всего записей //10-сколько записей на странице //'page'-GET параметр, которому будет присваиваться номер страницы //$page-собственно сам номер страницы $oScroller = new Scroller(1520, 10, 'page', $page); // scroller params $hScrollerParams = array( "targetUrl" => 'pager.php', "navCount" => 5, "mode" => "html", "title" => "Страницы: ", "backName" => "Пред", "forwardName" => "След" ); echo $oScroller->show($hScrollerParams); ?>
2lexinfo Вы забыли указать использование таких важных свойств класса, как PHP: "limit" => $oScroller->limit, "offset" => $oScroller->offset Фактически, это ключевые его свойства, ради них весь класс и пишется