Przejdź do treści

Aktualizacja - Skrypty

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:

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);

Przykład

Komentarze

Zobacz więcej komentarzy

Facebook