System newsów
Jak zrobić system newsów?
Dla internautów odwiedzających naszą stronę bardzo przydatna może się okazać lista wprowadzonych ostatnio nowości w całym serwisie wraz z ich opisami. Najczęściej tego typu skrypty nazywa się systemem newsów. Umieszcza się ją zwykle na stronie głównej. Maja taką zaletę w stosunku do daty aktualizacji, że nie trzeba przeglądać wszystkich stron, aby znaleźć te, które były ostatnio modyfikowane (co w przypadku słabego transferu i obszernej witryny może dość długo trwać). Natomiast w odróżnieniu od sygnalizowania nowości, system newsów zbiera w jednym miejscu wszystkie informacje wraz z opisami wprowadzonych zmian. Wystarczy spojrzeć i już można szybko przenieść się do nowych stron, klikając odpowiednie odsyłacze.
Wymagana wiedza:
- Odsyłacze
- Wstawianie obrazków
- Podstawy stylów CSS (m.in. arkusze stylów)
Aby wprowadzić system newsów, należy skopiować poniższy kod i zapisać go w pliku z rozszerzeniem *.css - np. news.css:
/* Tytuł: */
.news dt {
font-size: 14px; /* rozmiar czcionki */
text-align: left; /* wyrównanie tekstu: left, right, center, justify */
padding: 5px; /* margines wewnątrz */
border-width: 1px; /* grubość obramowania */
border-style: solid; /* styl obramowania: solid, dashed, dotted, double, groove, ridge, inset, outset */
border-color: gray; /* kolor obramowania */
font-weight: bold;
}
.news dt, .news dt a:link, .news dt a:visited {
background: silver; /* tło tytułu */
color: #505050; /* kolor tytułu */
text-decoration: none;
}
/* Treść */
.news dd {
background: white; /* tło */
color: black; /* kolor tekstu */
font-size: 12px; /* rozmiar czcionki */
border-width: 1px; /* grubość obramowania */
border-style: solid; /* styl obramowania: solid, dashed, dotted, double, groove, ridge, inset, outset */
border-color: gray; /* kolor obramowania */
border-top-width: 0;
margin: 0;
margin-bottom: 20px;
}
.news_content {
padding: 5px; /* margines wewnatrz */
text-align: justify; /* wyrównanie tekstu: left, right, center, justify */
}
/* Data */
.news_date {
font-size: 11px; /* rozmiar czcionki */
text-align: left; /* wyrównanie tekstu: left, right, center, justify */
padding: 5px;
padding-bottom: 0;
}
.news_date span {
font-weight: bold;
}
/* Obrazek: */
.news_img {
float: left; /* ustawienie: left, right */
margin-right: 10px;
margin-bottom: 5px;
border: 0;
}
/* Więcej... */
.news_more {
font-size: 11px;
text-align: right;
margin-bottom: 5px;
margin-right: 15px;
}
/* Autor */
.news_author {
font-size: 11px; /* rozmiar czcionki */
text-align: left; /* wyrównanie tekstu: left, right, center, justify */
border-top-width: 1px; /* grubość obramowania */
border-top-style: dashed; /* styl obramowania: solid, dashed, dotted, double, groove, ridge, inset, outset */
border-top-color: gray; /* kolor obramowania */
padding: 5px; /* margines wewnatrz */
clear: both;
}
.news_author span {
font-weight: bold;
}Wszystkie ważniejsze linijki zostały opisane. Oczywiście powyższe deklaracje można dołączyć do istniejącego arkusza stylów strony.
Dalej wykonujemy analogiczną czynność z kodem przedstawionym poniżej, jednak tym razem zapisujemy go w pliku z rozszerzeniem *.js - np. news.js:
/**
* @author Sławomir Kokłowski {@link https://www.kurshtml.edu.pl}
* @copyright NIE usuwaj tego komentarza! (Do NOT remove this comment!)
*/
function News(days)
{
this.config = {
//////////
// Konfiguracja:
'days': 0, // ilość dni wyświetlania newsów (0 = zawsze)
// Ustawienia domyślne:
'author': '', // autor
'email': '', // e-mail
'img': '', // obrazek
'width': '', // szerokość obrazka
'height': '', // wysokość obrazka
'target': '' // ramka (target="...")
//////////
};
this.il_dni = typeof days != 'undefined' ? days : this.config['days'];
var now = new Date();
var content = '';
this.dodaj = function(dzien,miesiac,rok, tytul,tresc, adres,ramka, dodal,email, obraz,width,height)
{
if (!this.il_dni || (now - new Date(rok, miesiac-1, dzien))/(24*60*60*1000) < this.il_dni)
{
if (dzien < 10) dzien = '0' + dzien;
if (miesiac < 10) miesiac = '0' + miesiac;
if (typeof dodal == 'undefined') dodal = this.config['author'];
if (typeof email == 'undefined') email = this.config['email'];
if (typeof obraz == 'undefined') obraz = this.config['img'];
if (typeof obraz == 'undefined') width = this.config['width'];
if (typeof obraz == 'undefined') height = this.config['height'];
if (typeof ramka == 'undefined') ramka = this.config['target'];
var link = adres ? new Array('<a ' + (ramka ? ' target="' + ramka + '"' : '') + 'href="' + adres + '">', '</a>') : new Array('', '');
content +=
'<dt>' + link[0] + tytul + link[1] + '</dt>' +
'<dd>' +
'<div class="news_date"><span>Dodano:</span> ' + dzien + '.' + miesiac + '.' + rok + '</div>' +
'<div class="news_content">' +
(obraz != '' ? link[0] + '<img src="' + obraz + '" alt="" class="news_img"' + (width ? ' width="' + width + '"' : '') + (height ? ' height="' + height + '"' : '') + '>' + link[1] : '') +
tresc +
'</div>' +
(adres ? '<div class="news_more">' + link[0] + 'Więcej...' + link[1] + '</div>' : '') +
(dodal != '' ? '<div class="news_author"><span>' + (email == '' || email.indexOf('@') > 0 ? 'Dodane przez' : 'Źródło') + ':</span> ' + (email.replace(/(^ +| +$)/g, '') ? '<a href="' + (email.indexOf('@') > 0 ? 'mailto:' : '') + email + '">' + dodal + '</a>' : dodal) + '</div>' : '') +
'</dd>';
}
}
this.wyswietl = function()
{
if (content) document.write('<dl class="news">' + content + '</dl>');
}
}Na początku można ustawić zmienne konfiguracyjne. Np. aby w naszym serwisie nie "straszyły" kilkumiesięczne "nowości", można ustawić przez ile dni od ich wprowadzenia mają się wyświetlać na liście. Potem co jakiś czas można czyścić kod z przestarzałych nowości, które już się nie wyświetlają. Jeżeli wszystkie lub większość newsów będzie dodawała ta sama osoba, można podać domyślnego autora i ewentualnie e-mail. Dzięki temu nie trzeba będzie już tego robić podczas dodawania pojedynczych nowości do listy. Oczywiście jeżeli wybrane newsy będą dodane np. przez innego autora, wprowadzenie konfiguracji domyślnej w tym nie przeszkadza. Dla takich specjalnych pozycji będzie wystarczyło po prostu podać różniące się dane wprost przy dodawaniu newsów - domyślne ustawienia konfiguracji zostaną dla tych różniących się elementów nadpisane.
Następnie w nagłówku dokumentu (wewnątrz <head>...</head>) wklejamy:
<link rel="stylesheet" href="news.css"> <script src="news.js"></script>
Na koniec pozostało już tylko wstawić w wybranym miejscu strony treści newsów (nowości):
<script> var news = new News(); ///// // Dodawanie newsów w postaci: // news.dodaj(dzień,miesiąc,rok, // 'Tytuł','Treść newsa...', // 'adres','ramka', // 'autor','e-mail', // 'obrazek',szerokość,wysokość); ///// ////////// // Dodawanie newsów: news.dodaj(dzień,miesiąc,rok, 'Tytuł', 'Treść newsa...'); news.dodaj(dzień,miesiąc,rok, 'Tytuł', 'Treść newsa...'); news.dodaj(dzień,miesiąc,rok, 'Tytuł', 'Treść newsa...'); ////////// news.wyswietl(); </script>
Kolejne newsy na liście dobrze jest układać w kolejności odwrotnej, tzn. najnowsze na początku. Dzięki temu ostatnie wiadomości będą widoczne już na pierwszy rzut oka.
UWAGA!
Treść newsów musi się znajdować w jednej linijce, tzn. absolutnie niedozwolone jest przełamywanie wiersza klawiszem Enter. Ponadto treść, tytuł ani inne elementy normalnie nie mogą zawierać znaków: "'" (apostrof), "\" (odwrócony ukośnik). Jeżeli musimy ich użyć, należy poprzedzić je dodatkowym znakiem "\" - np. "\'", "\\". Poza tym tytuły newsów nie mogą zawierać znaczników HTML. Można je natomiast wpisywać bez przeszkód w treści newsów, np. w celu pogrubienia tekstu albo wstawienia dodatkowego odnośnika czy obrazka.
Dodatkowo pamiętaj, że dni i miesiące w datach, których numer porządkowy jest mniejszy od 10, nie należy poprzedzać zerem na początku, natomiast rok musi być liczbą czterocyfrową. Poprawnie: 1,2,2003, niepoprawnie: 01,02,03.
Można przenosić do nowej linii poszczególne parametry newsa, które są rozdzielone przecinkami:
news(dzień,miesiąc,rok, 'Tytuł', 'Treść newsa...', 'adres', 'ramka', 'autor', 'e-mail', 'obrazek', 50,50);
Istnieje wiele sposobów dodawania kolejnych newsów (można łączyć kilka w tym samym skrypcie):
- Data, tytuł, treść:
news(dzień,miesiąc,rok, 'Tytuł','Treść newsa...');
- Data, tytuł, treść, adres "Więcej..." (lokalizacja podstrony albo adres internetowy):
news(dzień,miesiąc,rok, 'Tytuł','Treść newsa...', 'adres');
- Data, tytuł, treść, adres "Więcej...", nazwa ramki (lub '_blank' jeśli chcemy wczytać stronę w nowym oknie):
news(dzień,miesiąc,rok, 'Tytuł','Treść newsa...', 'adres','ramka');
- Data, tytuł, treść, adres "Więcej...", nazwa ramki, autor:
news(dzień,miesiąc,rok, 'Tytuł','Treść newsa...', 'adres','ramka', 'autor');
- Data, tytuł, treść, adres "Więcej...", nazwa ramki, autor, e-mail autora:
news(dzień,miesiąc,rok, 'Tytuł','Treść newsa...', 'adres','ramka', 'autor','e-mail');
- Data, tytuł, treść, adres "Więcej...", nazwa ramki, źródło:
news(dzień,miesiąc,rok, 'Tytuł','Treść newsa...', 'adres','ramka', 'źródło',' ');
- Data, tytuł, treść, adres "Więcej...", nazwa ramki, źródło, link do źródła:
news(dzień,miesiąc,rok, 'Tytuł','Treść newsa...', 'adres','ramka', 'źródło','link');
- Data, tytuł, treść, adres "Więcej...", nazwa ramki, autor/źródło, e-mail/link, lokalizacja obrazka newsa (jeśli chcemy podać inny niż domyślny - w początkowej konfiguracji):
news(dzień,miesiąc,rok, 'Tytuł','Treść newsa...', 'adres','ramka', 'autor/źródło','e-mail/link', 'obrazek',50,50);
Aby pominąć jakieś parametry - ponieważ mają się one nie wyświetlać albo odpowiadają nam wartości domyśle wpisane wcześniej w konfiguracji skryptu - należy wpisać zamiast nich liczbę zero (0), a jeśli parametr taki jest objęty w apostrofy, trzeba usunąć jego zawartość pozostawiając tylko dwa apostrofy (''). Jedynie w przypadku podawania źródła zamiast autora, w miejscu e-maila/linka trzeba wpisać spację (' '), jeżeli chcemy pominąć link do źródła. Dzięki temu możemy podać późniejsze parametry, jednocześnie bez określania wcześniejszych, np.:
news(dzień,miesiąc,rok, 'Tytuł','Treść newsa...', 'adres','', '','', 'obrazek',50,50);