* Mapa strony

Projektowanie, optymalizacja stron

Porady dla webmasterów


* * Pokaż 'więcej' * *

Na wielu stronach z większą ilością tekstu jest skrót wpisu wraz z linkiem do całości.
Zaprezentuje jak coś takiego zrobić.

Funkcja

function skrot($znaki, $adres, $tekst) { $wyraz=explode(' ',substr($tekst,$znaki)); // mozna wpisac kropkę zamiast spacji $wyraz_bez_ucinania=substr($tekst,0,$znaki).$wyraz[0]; if (strlen($tekst) > $znaki) { echo '<p>'.$wyraz_bez_ucinania.' ...<br/><a href="'.$adres.'">więcej</a></p>'; } else { echo $tekst; } }

Funkcja ta jest wygodna i uniwersalna.

skrot(5, 'calosc.php', 'Jakiś tekst.');

5 - to ilość pokazywanych znaków, funkcja będzieli wyświetlać pełne wyrazy.
calosc.php - adres do całego artykułu.
Jakiś tekst. - dowolny tekst który chcemy podzielić.

demo

* * Stronicowanie w mysql * *

Stronicowanie jest oparte na dwóch funkcjach, dzięki temu zastosowanie stronicowania na stronie jest uproszczone do minimum.

Funkcja główna

function stronicowanie($kolumna, $tabela, $ileNaStronie) {
// autor - Puma: www.puma.pomorze.pl
global $ilosc, $strona, $iloscStron, $iloscNaStronie;
$stronicowanie = mysql_query("SELECT COUNT($kolumna) FROM $tabela");
$wiersz = mysql_fetch_row($stronicowanie);
$ilosc = $wiersz[0];

if ((!empty($_GET[strona]))&&(!preg_match('/^[0-9]+$/',$_GET[strona]))||($_GET['strona']>$ilosc)) { echo 'Nie ma takiej strony'; exit(); }

for($i = 0; $i < $ilosc; ++$i) {
$iloscNaStronie = $ileNaStronie; //ilosc elementow na jednej stronie
$iloscStron = ceil($ilosc/$iloscNaStronie); } //maksymalna ilosc stron
// jezeli $_GET jest puste to 0, a jezeli pelna to oblicza od ktorego wiersza wyswietlic
if (empty($_GET[strona])) { $strona=0; } else { $strona = $iloscNaStronie * $_GET[strona] - $iloscNaStronie; }
}

Funkcja nawigacyjna.

function stronicowanie_nawigacja($ilosc, $iloscNaStronie, $iloscStron, $nazwa, $sposob) {
// autor - Puma: www.puma.pomorze.pl
if ($ilosc > $iloscNaStronie) {

if ($sposob == 1) {
echo '<div class="st-naw">';
if ($_GET[strona] > 1) { echo '<a href="'.$nazwa.'.php?strona='.($_GET[strona]-1).'">‹‹</a>'; } //wstecz o jedna strone
for($i = 1; $i <= $iloscStron; ++$i) {
echo '<a href="'.$nazwa.'.php?strona='.$i.'" >['.$i.']</a>'; } //drukowanie linkow do stron
if (empty($_GET[strona])) { echo '<a href="'.$nazwa.'.php?strona='.(2).'">››</a>'; } // jezeli $_GET pusta to = 2
if ((!empty($_GET[strona]))&&($_GET[strona]<$iloscStron)) {echo '<a href="'.$nazwa.'.php?strona='.($_GET[strona]+1).'">››</a>';} //dalej o jedna strone
echo '</div>'; }

if ($sposob == 2) {
echo '<div class="st-naw">';
if ($_GET[strona] > 1) { echo '<a href="'.$nazwa.'.php?strona='.($_GET[strona]-1).'">‹‹</a>'; } //wstecz o jedna strone
if (empty($_GET[strona])) { echo '1/'.$iloscStron.' '; } else { echo ' '.$_GET[strona].'/'.$iloscStron.' '; } // jezeli $_GET pusta to wyswietli 1
if (empty($_GET[strona])) { echo '<a href="'.$nazwa.'.php?strona='.(2).'">››</a>'; } // jezeli $_GET pusta to = 2
if ((!empty($_GET[strona]))&&($_GET[strona]<$iloscStron)) {echo '<a href="'.$nazwa.'.php?strona='.($_GET[strona]+1).'">››</a>';} //dalej o jedna strone
echo '</div>'; }

if ($sposob == 3) {
echo '<div class="st-naw">';
if (!empty($_GET[strona])&&($_GET[strona]>1)) { echo '<a href="'.$nazwa.'.php?strona='.(1).'">‹‹</a>'; }
if ($_GET[strona]>2) { echo '<a href="'.$nazwa.'.php?strona='.($_GET[strona]-2).'">['.($_GET[strona]-2).']</a>'; }
if ($_GET[strona]>1) { echo '<a href="'.$nazwa.'.php?strona='.($_GET[strona]-1).'">['.($_GET[strona]-1).']</a>'; }
if (empty($_GET[strona])) { echo '<span class="strona">1</span>'; } else { echo '<span class="strona">'.$_GET[strona].'</span>'; }
if (empty($_GET[strona])) { echo '<a href="'.$nazwa.'.php?strona='.(2).'">[2]</a>'; } // jezeli $_GET pusta to = 2
if (empty($_GET[strona])) { echo '<a href="'.$nazwa.'.php?strona='.(3).'">[3]</a>'; } // jezeli $_GET pusta to = 3
if (!empty($_GET[strona])&&($_GET[strona]<$iloscStron)) { echo '<a href="'.$nazwa.'.php?strona='.($_GET[strona]+1).'">['.($_GET[strona]+1).']</a>'; }
if (!empty($_GET[strona])&&($_GET[strona]<$iloscStron-1)) { echo '<a href="'.$nazwa.'.php?strona='.($_GET[strona]+2).'">['.($_GET[strona]+2).']</a>'; }
if ($_GET[strona]<$iloscStron) { echo '<a href="'.$nazwa.'.php?strona='.$iloscStron.'">››</a>'; }
echo '</div>'; }
} }

W funkcjach nic nie zmieniasz.
Bardzo ważne jest to aby funkcje były umieszczone na stronie przed ich wywołaniem.

Wywołanie funkcji głównej.

stronicowanie('numer','obrazy', 1);

1. kolumna w bazie po której liczy ilość wierszy, dowolna.
2. nazwa tabeli w bazie.
3. ile elementów wyświetlić na jednej stronie.

i funkcji nawigacyjnej.

stronicowanie_nawigacja($ilosc, $iloscNaStronie, $iloscStron, 'index', 1);

W wywołaniu funkcji nawigacyjnej nie zmieniać trzech pierwszych parametrów (tych zmiennych).
4. nazwa pliku np. gdy jest galeria.php to należy wpisać 'galeria'.
5. sposób wyświetlania menu nawigacyjnego, 1 = 1, 2, 3 itd. 2 = ../.. (element/ile elementów).

Zapytanie do bazy z elementami które mają być wyświetlone musi spełniać jeden warunek, na końcu zapytania trzeba napisać.

LIMIT $strona, $iloscNaStronie

Przykładowe zapytanie do bazy.

$zapytanie = mysql_query("SELECT * FROM obrazy ORDER BY numer ASC LIMIT $strona, $iloscNaStronie");

Tak wygląda całość tzn. wywołanie funkcji + zapytanie + wyświetlanie zdjęć (tak jest na stronie z działającym przykładem).

// stronicowanie
stronicowanie('numer','obrazy', 1);
stronicowanie_nawigacja($ilosc, $iloscNaStronie, $iloscStron, 'galeria', 1);

// wyswietlanie
$zapytanie = mysql_query("SELECT * FROM obrazy ORDER BY numer ASC LIMIT $strona, $iloscNaStronie");
while($rekord = mysql_fetch_assoc($zapytanie)) {
echo '<p><img src="grafika/'.$rekord[numer].'.jpg" alt="" /></p> '; }
// koniec wyswietlania
stronicowanie_nawigacja($ilosc, $iloscNaStronie, $iloscStron, 'galeria', 2);
stronicowanie_nawigacja($ilosc, $iloscNaStronie, $iloscStron, 'galeria', 3);

przykład
Przykład jest na wyświetlaniu zdjęć, można zastosować to do stronicowania tekstu.

* * Klikomierz w mysql * *

1. Tworzymy bazę danych.
2. Następnie tabelę w bazie o nazwie klikomierz.
3. W tabeli dwie kolumny o nazwach ile(typ smallint) oraz plik(typ varchar, tyle znakowy ile potrzebujecie miejsca na nazwy plików).

Teraz czas na pliki nam potrzebne, tworzymy plik połączeniowy z bazą mysql
polaczenie.php

<?php
$baza = @mysql_connect("serwer_bazy", "login", "haslo_do_bazy")
or die('<h1>Nie można się połączyć z bazą danych.</h1>');
mysql_select_db("nazwa_bazy",$baza);
?>

teraz czas na plik zliczający nasze kliknięnia
klikniecia.php

<?php
// inicjujemy polaczenie z baza
include('polaczenie.php');

// sprawdzamy czy dany plik juz jest w bazie
$wynik = mysql_query("SELECT plik FROM klikomierz WHERE plik='$_GET[id]'", $baza);

if (mysql_affected_rows()>0) {
// jezeli dany plik juz jest, to dodajemy jeden do pola 'ile'
mysql_query("UPDATE klikomierz SET ile=ile+1 WHERE plik='$_GET[id]'", $baza);
}
if (mysql_affected_rows()==0) {
// jezeli danego pliku nie ma w bazie, to dodajemy go
mysql_query("INSERT INTO klikomierz VALUES ('1', '$_GET[id]')", $baza);
}

// zamykamy polaczenie z baza
mysql_close($baza);

// przekierowujemy na dany plik po operacjach na bazie
Header("Location: $_GET[id]"); exit();
?>

Linki do plików które chcemy takim sposobem liczyć (kliknięcia), mają postać
<a href="klikniecia.php?id=ścieżka_do_pliku">
Założyłem że wszystkie pliki znajdują się w tym samym katalogu, jeżeli jest inaczej to znień odpowiednio ścieżki do poszczególnych plików.

przykład

* * Sonda na stronę. * *

Sonda to czasami wygodne rzecz na stronie. Taki skrypt przedstawie niżej.

<?php

// ********************************
// Autor skryptu : Puma
// www.puma.pomorze.pl
// ********************************

if(isset($_COOKIE['sonda'])) {
$wyniki_plik = file('sonda.dat');
$wyniki = '
<table>
<tr><td>Odpowiedź</td><td>Wynik</td></tr>
<tr><td>Mężczyzna</td><td>'.$wyniki_plik[0].'</td></tr>
<tr><td>Kobieta</td><td>'.$wyniki_plik[1].'</td></tr>
</table>';
} else {
$formularz = '
<form id="sonda" action="'.$_SERVER[PHP_SELF].'" method="post">
<fieldset><legend>Podaj swoją płeć</legend>
<label><input type="radio" name="glos" value="o1" />Mężczyzna</label>
<label><input type="radio" name="glos" value="o2" />Kobieta</label>
<input type="submit" value="Głosuj" name="glosuj" />
</fieldset>
</form>';

if(isset($_POST['glosuj'])) {
$odpowiedz = $_POST['glos'];

if($odpowiedz == "") {
$error = '<p>Nie zaznaczyłeś(aś) żadnej odpowiedzi</p>';
} else {

if(file_exists("sonda.dat")); {
$fp = fopen("sonda.dat", "r+"); // chmod 777

// dodajesz wiersze w zaleznosci ile odpowiedzi jest w sondzie
$o1 = intval(fgets($fp));
$o2 = intval(fgets($fp));

switch($odpowiedz) {
case "o1":$o1++; break;
case "o2":$o2++; break;
}
fseek($fp, 0);
fputs($fp, $o1."\r\n");
fputs($fp, $o2."\r\n");
// *******************************************************
setcookie ("sonda", "www.puma.pomorze.pl", time()+30*86400); // ustawia cookie na 30 dni
header("Location: $_SERVER[PHP_SELF]"); }
}
}
}
?>

Do zbierania danych z naszej sondy potrzebny jest plik sonda.dat, nadajemy jemu chmod 777.

Teraz wyświetlamy formularz lub wyniki sondy oraz ewentualny komunikat o błędzie przez napisanie w obojętnie którym miejscu naszej strony gdzie jest skrypt :

<?php
echo $error;
echo $wyniki;
echo $formularz;
?>

Sonda jest tak zrobiona że ktoś kto oddał już swój głos zobaczy tylko wyniki sondy.

demo

Portfolio

projektowanie, optymalizacja

www.puma.pomorze.pl

2017 / 06 / 29
Po
Wt
Śr
Cz
Pi
So
Ni
1
2
3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

Jeżeli skorzystałeś z moich porad,
będę wdzięczny za umieszczenie linka do mojej strony.

<a href="http://www.puma.pomorze.pl" title="Porady webmasterskie">Porady webmasterskie</a>
Konkurs WWW - forumweb.prv.pl :: 3 MIEJSCE
(2007.05)
Puma © 14.05.2006 Moje strony: Portfolio | Świat marzeń i prawdy | Aktualności - komentarze