php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2009

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 04.11.2009, 14:35  
Erfahrener Benutzer
 
Benutzerbild von litterauspirna
 
Registriert seit: 24.04.2008
Beiträge: 3.172
PHP-Kenntnisse:
Anfänger
litterauspirna sorgt für eine eindrucksvolle Atmosphärelitterauspirna sorgt für eine eindrucksvolle Atmosphäre
litterauspirna eine Nachricht über ICQ schicken
Standard Problem beim berenzten ausgeben von links in einer blätterfuntion

Hallo Leute und werte Gemeinde,

ich habe mir nun eine eigene Blätterfunktion geschrieben und diese ist auch fast fertig, wenn da nicht der eine Punkt wäre, wo ich überhaupt grad gar kein Ansatz habe wie ich das umsetzen soll.

Die einzelne Seitennavigation klappt, klicken zur ersten seite, zur letzten seite klappt. Auch klappt es wenn ich irgendwo in der Navigation bin, dann auch einen Link zu klicken der automatisch auf die nächste vor oder zurück geht. Genau wie hier eben.

Nur will ich nun das so haben das ich maximal immer nur 15 Links anzeigen lassen kann und wenn ich dann auf das zeichen für die nächste Seite klicke automatisch immer eine hinten dran gehangen wird, aber trotzdem in der Zahl immer nur 15 Links angezeigt werden.

Puhhh ich hoffe ich habe das einigermaßen verständlich rüber gebracht.

Hier der Code der Funktion:
PHP-Code:
<?php
/*
*
* blätterunktion für das seitenweise ausgeben von datensätzen
*
*/
if(!function_exists('blaettern')){
 
 
/*
 *
 * @param $found_ds / datensätzse gesamt gefunden
 * @param $page / ermittelte seitenzahl nach errechnung mit gefundenen datensätzen
 * @param $data_pro_page / datensätze die pro seite ausgegeben werden sollen
 * @param $url / link url beim blättern
 *
 */
 
 
function blaettern($zeilen,$page,$data_pro_page,$url){
 
  
//maximale linkausgabe bestimmen
  
$max_ausgabe 15;
 
  
//ermitteln wieviele seiten sich gesamt ergeben
  
$gesamt_seiten floor(($zeilen) / $data_pro_page 1) ;
 
  
//aktuell gewählte seite ermitteln
  
$seite_aktuell $page;
  if(
$seite_aktuell 0){
 
   
$seite_aktuell $page;
  }
  else{
 
   
$seite_aktuell 1;
  }
 
  
//startseite ermitteln
  
$start $seite_aktuell $gesamt_seiten;
 
  if(
$start 1){
 
   
$start 1;
  }
 
  
//seitenlink variable initialisieren
  
$link ='';
 
  
//auslesen der einzelnen seiten
  
for($i $start$i $gesamt_seiten$i++){
   if(
$seite_aktuell == "$i"){
 
    
$link .='<li class="page_aktiv">'.$i.'</li>';
   }
   else{
 
    
$link .= '<li class="page_bl"><a href="'.$url.'='.$i.'">'.$i.'</a></li>';
   }
  }
 
  
//nächste seite link krieren
  
if($seite_aktuell $gesamt_seiten 1){
 
   
$next_bl $seite_aktuell 1;
  }
  else{
 
   
$next_bl $gesamt_seiten 1;
  }
  
$next_bl_link '<li class="prev_next_bl"><a href="'.$url.'='.$next_bl.'">&raquo;</a></li>';
 
  
//vorhergehende seite ermitteln
  
if($seite_aktuell 1){
 
   
$prev_bl $seite_aktuell 1;
  }
  else{
 
   
$prev_bl 1;
  }
  
$prev_bl_link '<li class="prev_next_bl"><a href="'.$url.'='.$prev_bl.'">&laquo;</a></li>';
 
  
//erste seite ermitteln
  
$erste_seite $gesamt_seiten $gesamt_seiten 1;
  
$erste_seite_link ='<li class="erste_seite"><a href="'.$url.'='.$erste_seite.'">&laquo;&laquo;</a>';
 
  
//link für letzte seite kreieren
  
$letzte_seite $gesamt_seiten 1;
  
$letzte_seite_link ='<li class="letzte_seite"><a href="'.$url.'='.$letzte_seite.'">&raquo;&raquo;</a></li>';
 
  
//ausgeben des seiteninfozählers
  
$page_info '<li class="seiten_zaehler">'.$seite_aktuell.' / '.($gesamt_seiten 1).'</li>';
 
  
$page_navi '<ul>'.$page_info.$erste_seite_link.$prev_bl_link.$link.$next_bl_link.$letzte_seite_link.'<li class="end_bl_nav"></li></ul>';
 
  return 
$page_navi;
 }
}
?>
Und hier der Code ao die Funktion dann ausgegeben wird.
PHP-Code:
<?php
/*
*
* ausgabe der datensätze mit ausführung der blätterfunktion
*
*/
$page intval($_GET['page']);
if(!isset(
$page) || $page ==''){
 
 
$page 1;
}
 
$data_pro_page 7;
 
 
$anzeige = ($page 1) * $data_pro_page;
//abfragen der tabelle 
$sqlbefehl ="
   Select SQL_CALC_FOUND_ROWS
    id,
    title,
    inhalt
   From
    bl_test
   Limit
    $anzeige,$data_pro_page
   "
;
$erg_data mysql_query($sqlbefehl);
if(!
$erg_data){
 
 echo 
'<pre>';
  die(
'Fehler im Query:'.mysql_error().'<br />'.$sqlbefehl);
 echo 
'</pre>';
}
else{
 
 
$found_rows ="Select FOUND_ROWS()";
 
$found_query mysql_query($found_rows);
 if(!
$found_query){
 
  echo 
'<pre>';
   die(
'Fehler im Query:'.mysql_error().'<br />'.$sqlbefehl);
  echo 
'</pre>';
 }
 else{
 
  
$zeilen mysql_fetch_row($found_query);
 
  if(
$zeilen[0] > 0){
 
   echo 
blaettern($zeilen[0],$page,$data_pro_page,$path.'/index.php?page');
  }
 }
 
 
/*
 *
 * ausgabe der datensätze
 *
 */
 
echo '<table cellspacing="0" cellpadding="0" border="1" width="300px"> ';
 
 while(
$data mysql_fetch_assoc($erg_data)){
 
  echo 
'<tr>';
 
   echo 
'<td height="20">';
 
    echo 
htmlspecialchars($data['title']);
 
    echo 
'<br />';
 
    echo 
htmlspecialchars($data['inhalt']);
 
   echo 
'</td>';
 
  echo 
'</tr>';
 
 }
 
 echo 
'</table>';
 
//ende ausgabe der datensätze
}
?>
</body>
</html>
Könnt Ihr mir da weiter helfen ich weis momentan nicht wo ich da ansetzen soll, das ist das einzige was mir in der funktion noch zu schaffen macht.

Vielen Dank für eure Hilfe Mfg litter

[EDIT]

Hier http://www.lit-web.de/blaettern/index.php könnt ihr das auch im Test sehen.
__________________
Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
http://www.lit-web.de

Geändert von litterauspirna (04.11.2009 um 14:41 Uhr).
litterauspirna ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 04.11.2009, 15:16  
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 6.269
Chriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer Anblick
Standard

Hallo,
hier ist mein Paginator:
PHP-Code:
<?php
class AIS_View_Helper_Paginator
{
    const 
PageEntriesDefault 10;
    const 
SmartListRange 11// use odd values only please

    
protected $render;

    protected 
$entries;
    protected 
$paramKey;
    protected 
$currentPage;
    protected 
$pageEntries;

    public function 
__toString()
    {
        try {
            
$xhtml = (string)$this->getRender();
            
$this->reset();
            return 
$xhtml;
        } catch (
Exception $exception) {
            return (string)
$exception->getMessage() . $exception->getTraceAsString();
        }
    }

    public function 
paginator($entries$pageEntries self::PageEntriesDefault$paramKey "page"$currentPage null)
    {
        
//Debug::stop($entries);
        
$this->setEntries($entries);
        
$this->setParamKey($paramKey);
        
$this->setPageEntries($pageEntries);
        
$this->setCurrentPage($currentPage);
        return 
$this;
    }

    protected function 
setEntries($entries)
    {
        
assert('ctype_digit(strval($entries))');
        
$this->entries = (int)$entries;
    }

    protected function 
setParamKey($paramKey)
    {
        if (empty(
$paramKey) || !is_string($paramKey)) {
            throw new 
Exception_Paginator("the parameter key must be a valid string");
        }
        
$this->paramKey = (string)$paramKey;
    }

    protected function 
setPageEntries($pageEntries)
    {
        
assert('ctype_digit(strval($pageEntries)) && $pageEntries > 0');
        
$this->pageEntries = (int)$pageEntries;
    }

    protected function 
setCurrentPage($currentPage)
    {
        if (
is_null($currentPage)) {
            
$request Zend_Controller_Front::getInstance()->getRequest();
            
$currentPage $request->getParam($this->paramKey);
        }
        if (
$currentPage 1) {
            
$currentPage 1;
        }
        
$this->currentPage = (int)$currentPage;
    }

    public function 
setView(Zend_View_Interface $view)
    {
        
$this->_view $view;
    }

    public function 
getRender()
    {
        if (
is_null($this->render)) { // simple cache, method probably called twice on bottom/top of datatable
            
if ($this->getPages() <= 1) {
                return 
"";
            }
            
#Debug::stop($this->getPages());

            
$previous $this->getLinkPrevious();
            
$first    $this->getLinkFirst();
            
$list     $this->getLinkList();
            
$last     $this->getLinkLast();
            
$next     $this->getLinkNext();

            
$xhtml = <<<XHTML
<div class="navBar paginator">
    <div class="first">
        $first
    </div>
    <div class="previous">
        $previous
    </div>
    <div class="list">
        $list
    </div>
    <div class="next">
        $next
    </div>
    <div class="last">
        $last
    </div>
</div>
XHTML;
        }
        return 
$xhtml;
    }

    protected function 
getLink($url$label)
    {
        return 
sprintf('<a href="%s" onclick="showLoadPanel();return true">%s</a>'$url$label);
    }

    protected function 
getLinkPrevious()
    {
        
$url Func::getReplacedUrl(_URL, array($this->paramKey => $this->currentPage 1));
        
$label TextControl::getInstance(_DSN_FLASHMAPPED)->getText("COMMON_PAGE_PREVIOUS");
        return 
$this->currentPage 1
             
$this->getLink($url$label)
             : 
$label;
    }

    protected function 
getLinkFirst()
    {
        
$url Func::getReplacedUrl(_URL, array($this->paramKey => 1));
        
$label TextControl::getInstance(_DSN_FLASHMAPPED)->getText("COMMON_PAGE_FIRST");
        return 
$this->currentPage == 1
             
$label
             
$this->getLink($url$label);
    }

    protected function 
getLinkLast()
    {
        
$url Func::getReplacedUrl(_URL, array($this->paramKey => $this->getPages()));
        
$label TextControl::getInstance(_DSN_FLASHMAPPED)->getText("COMMON_PAGE_LAST");
        return 
$this->currentPage == $this->getPages()
             ? 
$label
             
$this->getLink($url$label);
    }

    protected function 
getLinkNext()
    {
        
$url Func::getReplacedUrl(_URL, array($this->paramKey => $this->currentPage 1));
        
$label TextControl::getInstance(_DSN_FLASHMAPPED)->getText("COMMON_PAGE_NEXT");
        return 
$this->currentPage <= $this->getPages()
             ? 
$this->getLink($url$label)
             : 
$label;
    }

    
/**
     * @see http://***../bugtracker/view.php?id=88
     */
    
protected function getLinkList()
    {
        return (
self::SmartListRange 3) <= $this->getPages() // 1 (start) + 1 (end) + 1 buffer (otherwise we can use the simple list)
             
$this->getLinkListSmart()
             : 
$this->getLinkListSimple();
    }

    protected function 
getLinkListSimple()
    {
        
$xhtml "";
        for (
$page 1$page <= $this->getPages(); ++$page) {
            
$xhtml .= $this->getRenderPage($page);
        }
        return 
$xhtml;
    }

    
/**
     * @see http://***../bugtracker/view.php?id=88
     * @desc smart means, we use just a range of pages to display, f.e. "1 .. 13 14 15 16 17 .. 30"
     */
    
protected function getLinkListSmart()
    {
        
$half    = (int)floor(self::SmartListRange 2);
        if ((
$this->currentPage $half) < 2) {
            
// current page is near the left border, f.e. current page is 4
            
$start 2;
            
$end   $start + (self::SmartListRange 1);
        } elseif ((
$this->currentPage $half) > ($this->getPages() - 1)) {
            
// current page is near the right border, f.e. penultimate (vorletzte) page
            
$end   $this->getPages() - 1;
            
$start $end - (self::SmartListRange 1);
        } else {
            
// current page is somewhere between with enough space to both borders, f.e. current page is 24 of 50
            
$start $this->currentPage $half;
            
$end   $this->currentPage $half;
        }
        
// make sure our calculations are correct, it failed several times, I hope this bugfix works
        
assert('($end - $start) == (self::SmartListRange - 1)');
        
assert('$start > 1');
        
assert('$end < $this->getPages()');

        
$pages   = array();
        
$pages[] = $this->getRenderPage(1);
        
$pages[] = $this->getRenderDotDot();
        for (
$page $start$page <= $end; ++$page) {
            
$pages[] = $this->getRenderPage($page);
        }
        
$pages[] = $this->getRenderDotDot();
        
$pages[] = $this->getRenderPage($this->getPages());

        return 
implode("\n"$pages);
    }

    protected function 
getRenderPage($page)
    {
        if (
$this->currentPage == $page) {
            return 
'<span class="page selected">' $page '</span>';
        } else {
            
$url Func::getReplacedUrl(_URL, array($this->paramKey => $page));
            return 
'<span class="page">' $this->getLink($url$page) . '</span>';
        }
    }

    protected function 
getPages()
    {
        
#Debug::stop($this->entries, $this->pageEntries);
        
return (int)ceil($this->entries $this->pageEntries);
    }

    protected function 
getRenderDotDot()
    {
        return 
'<span class="dotdot">..</span>';
    }

    protected function 
reset()
    {
        
$this->render null;
        
$this->entries null;
        
$this->paramKey null;
        
$this->currentPage null;
        
$this->pageEntries null;
    }
}
?>
(Zend Framework View Helper)

Interessant für dich getLinkListSmart(), der mehr als AIS_View_Helper_Paginator::SmartListRange Seiten dann aufsplittet mit "..". Vielleicht ist das ja ein Ansatz für dich.
Miniaturansicht angehängter Grafiken
problem-beim-berenzten-ausgeben-von-links-einer-blaetterfuntion-unbenannt-1.jpg  

Geändert von Chriz (04.11.2009 um 15:19 Uhr).
Chriz ist offline  
Alt 04.11.2009, 15:34  
Erfahrener Benutzer
 
Benutzerbild von lstegelitz
 
Registriert seit: 07.09.2009
Beiträge: 4.005
PHP-Kenntnisse:
Fortgeschritten
lstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nett
Standard

Die for-Schleife für die Ausgabe des Headers startet bei
min(maximale Seite-14, max(1,aktuelle Seite-7))
und endet bei
max(15, min(maximale Seite, aktuelle Seite+7))
Seiten aus.

Bist du auf Seite 1, startet die Ausgabe bei 1 und geht bis 15.
Bist du auf Seite 2, startet die Ausgabe bei 1 und geht bis 15.
...
Bist du auf Seite 7, startet die Ausgabe bei 1 und geht bis 15
Bist du auf Seite 8, startet die Ausgabe bei 1 und geht bis 15
Bist du auf Seite 9, startet die Ausgabe bei 2 und geht bis 16
Bist du auf Seite 10, startet die Ausgabe bei 3 und geht bis 17
...
Bist du auf Seite 34, startet die Ausgabe bei 28 und geht bis 42
Bist du auf Seite 35, startet die Ausgabe bei 28 und geht bis 42

hier ein Beispielcode...
PHP-Code:
$cur 1// aktuelle Seite
$max 42// maximale Seite

// jeweils 1 Zeile pro besuchter Seite
for ($i=1$i<$max$i++) {
    
$from min($max-14max(1,$cur-7)); // Startseite (min) für den Blätter-Header
    
$to max(15min($max$cur+7)); // Endeseite (max) für den Blätter-Header
    
echo "$cur - $from/$to : "// aktuelle Seite - min/max
        // Ausgabe des Headers
    
for ($k=$from$k <= $to$k++) {
        echo 
$k.'  ';
    }
    
$cur++; // aktuelle Seite hochzählen
    
echo "<br>\n"// neuer Blätter-Header

Ja, ich weiss.. es sieht wild aus, ist aber zum selber basteln gedacht
__________________
Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.
lstegelitz ist offline  
Alt 04.11.2009, 15:37  
Erfahrener Benutzer
 
Benutzerbild von litterauspirna
 
Registriert seit: 24.04.2008
Beiträge: 3.172
PHP-Kenntnisse:
Anfänger
litterauspirna sorgt für eine eindrucksvolle Atmosphärelitterauspirna sorgt für eine eindrucksvolle Atmosphäre
litterauspirna eine Nachricht über ICQ schicken
Standard

Danke euch beiden ich werde mir beides mal genau ansehen und mich dann wieder melden.

Ist ja nur der letzte Feinschliff der noch fehlt, ansonsten ist ja alles wie es sein soll.
__________________
Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
http://www.lit-web.de
litterauspirna ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] Text mit Links (HTML)-formatiert ausgeben asyoulikeit Datenbanken 6 02.06.2008 08:49
SQL-Abfrage in html-Tabelle ausgeben - Problem mit der Spaltenbreite pavelmr PHP Tipps 2008 3 17.04.2008 17:19
Problem mit Links DJ Nuno HTML, Usability und Barrierefreiheit 0 17.10.2007 07:24
Mysql Problem Datensätze ausgeben enes23 Datenbanken 1 24.06.2006 19:55
Problem mit Links PHP Tipps 2006 2 02.02.2006 17:24
dateien ausgeben kein Problem - ABER! dsmcg PHP Tipps 2005-2 9 22.10.2005 19:59
Problem mit PHP-Gästebuch - Neuste Einträge zuerst ausgeben? nicobischof PHP Tipps 2005-2 1 01.10.2005 23:17
Include Problem! Links inerhalb eines Includes ... PHP Tipps 2005-2 14 23.07.2005 20:20
Problem 1 - Ergebnis aus drei Tabellen ausgeben Datenbanken 4 15.07.2005 14:53
[gelöst] problem beim ausgeben aus einer DB LA-Finest PHP Tipps 2005 10 11.05.2005 14:23
Problem mit & Zeichen in Links HTML, Usability und Barrierefreiheit 4 14.02.2005 22:19
Problem: css mit php auslesen und stylenamen ausgeben PHP-Fortgeschrittene 5 09.01.2005 11:12
Problem mit links in Schleife web2 PHP Tipps 2004-2 2 23.11.2004 12:58
Problem beim Ausgeben vom Script PHP Tipps 2004 9 12.09.2004 15:51
Problem mit 2 gleichzeitigen MySQL abfragen PHP Tipps 2004 2 08.07.2004 13:57

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php return zurück letzte seite, blätterfuntion, php function letzte seite, des this.paramkey = \, found_rows() in zend framework, php link abfrage starten, php rendering später ausgeben, xhtml und return zurück zur letzten seite, fehler beim Öffnen der url getlink.php?link=, if(isset($_get[\'page\'])) { getlink($_get[\'page\']);, links für seitenweise ausgabe mit php

Alle Zeitangaben in WEZ +2. Es ist jetzt 20:41 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum