W KŚ Eksper 5/2004 znalazłem całkiem fajny skrypt newsów:
<?php
$katlog = "art";
$kat = opendir($katalog);
while ($plik = readdir($kat)){
$rozszerzenie=substr($plik,strrpos($plik,'.'));
if ($rozszerzenie==".txt"){
$baza["$katalog/$plik"]= date("y-m-j h:i",
filemtime($katalog."/".$plik));
}
}
closedir($kat);
if ($baza<>null){
arsort($baza);
while (list($nazwa,$data)=each($baza)){
$linia=0;
$nius=file($nazwa);
foreach ($nius as $wartosc){
if ($linia==0){
echo "".$wartosc."(";
echo $data . ")";
}
else echo $wartosc;
echo "
";
$linia++;
}
echo "
";
}
}
else echo "brak artykulow";
?> [/code]
Zrobłem katalog art i umiescilem w nim plik news1.txt. Na serwerze utworzylem katalog skrypt_newsy i umiescilem w nim plik z tym skryptem oraz katalog art w ktorym jest plik news1.txt. I po otworzeniu tego pliku pokazuje Mi się komunikat "brak artykulow ". Ale czemu :? Przeciez umiescilem w katalogu art plik txt z jednym newsem.
A i jeszcze da sie jakoś ten skrypt tak przerobic aby działał na serwerze z Safe Mode ?? Bo po wniesieniu pliku na serwer wyswietla sie:
Jeżeli ktos może wskazac błąd to prosilbym o poprawienie go na skrypcie bo jestem zielony w php i nie umialbym tego wykorzystac.
dam Ci tylko pomysl na zrobienie tego (bo ten skrypt nie przypadl mi do gustu i sam bym go wolal napisac)
laduj dane z pliku, rozbij je explode() a separator ustaw \n… potem za pomoca count() oblicz ilosc elementow po rozbiciu w tablicy i podziel to przez ilosc newsow na strone i zaokroglij do gory za pomoca ceil() ;] potem po prostu generujesz linki sobie tak zeby byly wyswietlane elementy tablicy tylko od np 10-19, 20-29 itd ;] koncowka jest tylko najgorsza ogolnie to musisz posiedziec troche w php a takie skrypty to nie beda CI sprawialy problemu
Złączono Posta: 24.03.2006 (Pią) 17:19
ps to zaokraglanie do gory z obliczonego counta i podzielonego przez max newsow na strone to sluzy do obliczenia na ile stron musisz podzielic te newsy ;]
Jeśli to pomoże, to w tym wątku http://forum.dobreprogramy.pl/viewtopic.php?t=60942 opisałe ideę dzielenie na strony. Wprawdzie na podstawie bazy danych ale zaadaptowanie to pod pliki nie jest już problemem.
BalonPL , lisek Fajnie tak pisać dla kompletnego laika w php który nie wie kompletnie nic w php (no tylko wiem znak otwierający skrypt i zamykający skrypt).
Mógłby ktoś to co radził lisek oraz BalonPL wstawic w ten skrypt ??
Złączono Posta: 26.03.2006 (Nie) 11:48
help
Złączono Posta: 02.04.2006 (Nie) 17:47
nikt nie wie ??
To bardzo Mi potrzebne.
Złączono Posta: 06.04.2006 (Czw) 16:03
Czyżby nikt na forum nie umiał PHP i nie zmieni Mi tego skrypciku :?
<?php
$ile = 10; #ile newsow na strone
$dir = 'newsy/';
$dw = opendir( $dir );
if( isset( $_GET['p'] ) )
{
$p = $_GET['p'];
}
else
{
$p = 0;
}
/**
* Tu sobie zapisujemy nazwy plików w tablicy zeby bylo nam potem latwiej
* dzielic to wszystko na strony
*/
$i = 0;
while( $file = readdir( $dw ) )
{
$roz = array_pop( explode( '.', $file ) );
if( $roz == 'txt' && $file !== '..' && $file !== '.' )
{
$pliki[$i] = $file;
$i++;
}
}
/**
* Teraz robimy sobie licznik stron
*/
$pager = 'Strony: Poczatek';
$strony = ceil( count( $pliki ) / $ile );
for( $i = 0; $i < $strony; $i++ )
{
if( $p == $i * $ile )
{
$pager .= ' '.( $i ).' ';
}
}
/**
* wyswietlamy
*/
for( $i = $p; $i < $p + $ile; $i++ )
{
if( $i < count( $pliki ) )
{
$fw = fopen( $dir.$pliki[$i], r);
echo fread( $fw, filesize( $dir.$pliki[$i] ) ).'
';
fclose( $fw );
}
}
echo '
';
echo $pager;
?>[/code]
napisalem cos takiego... to dziala ale linki do podstron sa zle wyswietlane... nie wiem dlaczego
na przyszlosc to nie licz ze ktos Ci to zrobi a jesli chcesz cos takiego to musisz sie udac na strony gdzie mozesz zlecac cos takiego za $$ (polecam sie :P)
[color=darkblue][size=75][i][b]Złączono Posta[/b]: 07.04.2006 (Pią) 8:48[/i][/size][/color]
chcialem dodac ze to nie wina zadnego Safe Mode… jakbys wiedzial co to jest to wcale nie ma to wplywu na te funkcje ;] [color=darkblue][size=75]Złączono Posta: 07.04.2006 (Pią) 8:52[/size][/color] tak sobie pomyslalem ze na przyszlosc prosze probowac samemu… dolaczam tutaj klase ktora napisalem - tez stronnicowanie ale bardziej zaawansowane z mozliwoscia poruszania sie po pagerze…
[code]<?php /** * Klasa pagera * @author Krzysztof ‘Balon’ Jagiełło * */ class pager { var $totalPages; # jest to mysql_num_rows var $ile; # ile danych na strone var $pagerMax; # ile linkow max w pagerze var $actPage; # aktualna strona ( $p ) var $pager; # Pager function _setPager( $actPage, $pagerMax, $totalPages, $ile) { $this->actPage = $actPage; $this->pagerMax = ceil( ( $pagerMax - 1 ) / 2 ); $this->totalPages = $totalPages; $this->ile = $ile; } function showPager() { $this->pager = 'Strony: << '; if( $this->actPage > 10 ) { $this->pager .= ‘[<](main,’.(%20%24this-) '; } for( $i = ( ( $this->actPage / 10 ) - $this->pagerMax ); $i <= ( $this->actPage / 10 ) + $this->pagerMax; $i++ ) { if ( $i > 0 && $i < $this->totalPages ) { if( ( $i*10 ) == $this->actPage ) { $this->pager .= '’.($i).' '; } else { $this->pager .= '’.($i).’ ‘; } } } if( $this->actPage < ( ( $this->totalPages * 10 ) - 10 ) ) { $this->pager .= ‘[>](main,’.(%20%24this-) ‘; } $this->pager .= ’ [>>](main,’.(%20(%20%24this-)’; return $this->pager; } } ?>
no wlasnie masz zmienic… gdzie utworzyles egzemplarz klasy smarty ?
$smarty = new smarty;
i jeszcze potem musisz dodac wskazanie tpl
$smarty->display( 'jakistemplate.tpl' );
wlasnie pracuje u siebie nad obiektowym i lepszym rozwiazaniem w ktorym bedzie dzialal ten caly pager… bo w tym co zrobilem to cos nie dizala to do konca bo pierwszy link jest zle wyswietlany…
zeby dzialalo poprawnie musisz jako nazwy plikow ustawiac kolejne liczby naturalne ;] bo w ten sposob czytana jest zawartosc folderu… a do odwrocenia newsow wystarczyło uzyc array_reverse juz powinno smigac
Tylko, że ja jestem kompletnie zielony w php i nie wiem jak
Pojawia się:
Warning: opendir(newsy/) [function.opendir]: failed to open dir: No such file or directory in /home/a/d/a/adam9870/www/skrypt_newsy/index.php on line 9
Warning: require_once(pager.class.php) [function.require-once]: failed to open stream: No such file or directory in /home/a/d/a/adam9870/www/skrypt_newsy/index.php on line 10
Fatal error: require_once() [function.require]: Failed opening required 'pager.class.php' (include_path='.:/usr/local/php5/lib/php') in /home/a/d/a/adam9870/www/skrypt_newsy/index.php on line 10
PS. W poprzednim kodzie skryptu co mi podawales zrobiłem 4 newsy i jak klikne na 1 (numer strony) to pojawił sie taki odsylacz:
to chyba błędzik :roll:
Złączono Posta: 07.04.2006 (Pią) 17:10
Proszę o pomoc.
Jak wcześniej napisałem to jest Mi to bardzo potrzebne…
a nie zauwazylem ze napisales ;p heh masz bledy bo Ci podalem kod skryptu jak go przerabialem wlasnie… xD teraz juz mam calkowicie gotowy skrypcik elegancko oparty na klasie pagera ktora przed chwila skonczylem krotka instrukcja
tworzysz plik pager.class.php o takiej zawartosci
<?php
/**
* Klasa ksiegi kosci
*
*/
class pager
{
var $ileMax; # ileMax na strone
var $actPage; # aktualna strona
var $ilePages; # ile stron (wynik guestbook::ileStron)
var $pagerMax = 3; # maxymalna ilosc linkow po lewej stronie aktywnego i prawej
var $text = array( 'PREV' => '<<< Poprzednia', 'NEXT' => 'Następna >>>', 'T_PREV' => 'Poprzednia strona', 'T_NEXT' => 'Następna strona' );
/**
* Konstruktor klasy
*
* @param integer $actPage aktualny numer strony
* @param integer $num ilosc wynikow (mysql_num_rows)
* @param inteher $ileMax ilosc newsow na strone
* @return guestbook
*/
function pager( $actPage, $num, $ileMax )
{
$this->actPage = $actPage;
$this->ileMax = $ileMax;
$this->ilePages = $this->ileStron( $num );
}
/**
* Pager
*
*/
function showPager()
{
$this->prev();
for( $i = ( $this->actPage / $this->ileMax ) - ($this->pagerMax - 1); $i <= ( $this->actPage / $this->ileMax ) + ( $this->pagerMax + 1 ); $i++ )
{
if( $i > 0 && $i <= $this->ilePages )
{
$this->page( ( $i-1 ) * $this->ileMax );
}
}
$this->next();
return $this->pager;
}
/**
* Poprzednia strona
*
*/
function prev()
{
if( ceil( $this->actPage/$this->ileMax ) <= 0 )
{
$this->pager = $this->text['PREV'];
}
else
{
$this->pager = ''.$this->text['PREV'].'';
}
}
/**
* Nastepna strona
*
*/
function next()
{
if( ceil( ( $this->actPage/$this->ileMax ) + 1 ) >= $this->ilePages )
{
$this->pager .= ' '.$this->text['NEXT'];
}
else
{
$this->pager .= ' '.$this->text['NEXT'].'';
}
}
/**
* wyswietlanie linku do strony
*
* @param integer $i numer strony
*/
function page( $i )
{
if( $this->actPage == $i )
{
$this->pager .= ' '.( ( $i/$this->ileMax ) + 1).'';
}
else
{
$this->pager .= ' '.( ( $i/$this->ileMax ) + 1).'';
}
}
/**
* Obliczanie ilosci stron
*
* @param integer $num liczba wpisow(mysql_num_rows)
* @return $ilePages
*/
function ileStron( $num )
{
return ceil( $num / $this->ileMax );
}
}[/code]
i plik [b]newsy.php[/b] o takiej zawartosci