Offrimi un caffè o una birra!
|
|
Tempo fa ho avuto la necessità di scrivere un generatore di Google Sitemaps per un forum phpBB, versione 2, hostato su Aruba.it con hosting Windows, che usa MySQL come Database. Il Forum ha sempre funzionato senza problemi, tranne l'impossibilità di usare il mod_rewrite per le URL. Al momento di dover generare la Sitemap mi sono trovato davanti al problema di doverla gestire con codice ASP. Ho preso allora spunto dal codice di un Sitemap Generator preesistente, per modificarlo leggermente e adattarlo al forum phpBB. Il mio codice prende tutti i forum e genera i link a tutti i post, non tiene in considerazione forum nascosti o bloccati. Inoltre, come detto sopra, non c'è riscrittura delle URL in quanto il forum gira su Hosting Windows 'MODIFICA IN BASE ALLA TUA CONNESSIONE <!--#include file="MyConnections.asp" --> <% MAXURLS_PER_SITEMAP = 50000 'MODIFICA IL PERCORSO DEL TUO SITO FORUM baseurl="http://www.yoursite.com/Forum/viewtopic.php?t="
strsql = "SELECT * FROM phpbb_topics"
utcOffset=1 response.ContentType = "text/xml" response.write "<?xml version='1.0' encoding='UTF-8'?>" response.write "<urlset xmlns='http://www.google.com/schemas/sitemap/0.84'>"
Set conn = Server.CreateObject("ADODB.Connection") conn.Open MM_conn_MySql_STRING Set rs = Server.CreateObject("ADODB.Recordset") rs.Open strsql, conn
Do while not rs.eof if URLS<MAXURLS_PER_SITEMAP then id_page=(rs("topic_id")) filelmdate=date() priority=1 if not isdate(filelmdate) then filelmdate=now() filedate=iso8601date(filelmdate,utcOffset) if priority="" or priority>1.0 then priority="1.0" response.write "<url><loc>"&(baseurl&id_page)&"</loc><lastmod>"&filedate&"</lastmod> <priority>"&priority&"</priority></url>" URLS=URLS+1 Response.Flush rs.movenext end if Loop response.write "</urlset>"
rs.Close Set rs = Nothing conn.Close Set conn = Nothing
Function iso8601date(dLocal,utcOffset) Dim d ' convert local time into UTC d = DateAdd("H",-1 * utcOffset,dLocal) iso8601date = Year(d) & "-" & Right("0" & Month(d),2) & "-" & Right("0" & Day(d),2) & "T" & _ Right("0" & Hour(d),2) & ":" & Right("0" & Minute(d),2) & ":" & Right("0" & Second(d),2) & "Z"
End Function
%> Inserite questo codice in una pagina .asp nella radice del sito, genererà una Sitemap compatibile con gli standard di Google, inseritela in Google Webmaster Tools e il gioco è fatto
|
|
|
SQL Server 2000 utilizzava i trigger. Un trigger è una particolare forma di Stored Procedure che viene attivata in automatico quando si verifica una operazione di INSERT, UPDATE o DELETE su una tabella. Il trigger risponde all'azione, dopo che l'azione è stata eseguita, ed è in grado di eseguire qualsiasi azione (supportata dal linguaggio Transact-SQL) e anche di fare un ROLLBACK della transazione che lo ha scatenato. I trigger fino a SQL Server 2000 erano quindi essenzialmente legati a istruzioni di tipo DML (Data Manipulation Language) SQL Server 2005 introduce i Trigger DDL. Un Trigger DDL è un trigger in grado di rispondere ad azioni di tipo Data Definition Language, cioè di scatenarsi quando si verificano delle operazioni di CREATE, ALTER o DROP. In parole povere, è possibile scatenare una operazione quando viene creato, modificato o eliminato un "oggetto" nel Database (Tabelle, Viste, Strored Procedures etc.) Il Trigger DDL espone tutti i dati relativi all'evento scatenante per mezzo di una funzione, chiamata eventdata() che contiene, sotto forma di XML, tutti i dettagli dell'evento. La funzione eventdata() fornisce un risultato tipo questo: <EVENT_INSTANCE> <EventType>CREATE_TABLE</EventType> <PostTime>2007-07-25T21:44:27.267</PostTime> <SPID>52</SPID> <ServerName>MyServer</ServerName> <LoginName>MyServer\User01</LoginName> <UserName>dbo</UserName> <DatabaseName>HotelList</DatabaseName> <SchemaName>dbo</SchemaName> <ObjectName>Hotels</ObjectName> <ObjectType>TABLE</ObjectType> <TSQLCommand> <SetOptions ANSI_NULLS="ON" ANSI_NULL_DEFAULT="ON" ANSI_PADDING="ON" QUOTED_IDENTIFIER="ON" ENCRYPTED="FALSE"/> <CommandText>create table Hotels(name varchar(50), address varchar(30), stars int)</CommandText> </TSQLCommad> </EVENT_INSTANCE> Questo frammento contiene tutto ciò che possiamo voler sapere sull'evento: EventType è il tipo di evento che ha fatto partire il Trigger, PostTime la data e l'ora dell'evento, ServerName il Server, LoginName la Login del nostro utente, TSQLCommand contiene i dettagli del comando che è stato eseguito etc. E' quindi sufficiente fare un parsing del frammento XML restituito dalla eventdata() per poter estrarre le informazioni necessarie. In questo caso ci viene in aiuto la funzione value che è possibile usare su variabili XML in SQL Server 2005, come nell'esempio seguente (clicca per ingrandire):
|
|
Da qualche tempo ho sviluppato alcuni siti che utilizzano uno script "clone" di YouTube. Lo script si chiama Vshare, è molto economico (10 dollari) e per il suo prezzo ha fin troppe funzionalità. Una funzionalità che però manca in Vshare sono le sitemaps. Ho provveduto quindi a creare due script in php che estraggono i video dal database MySQL e generano le sitemap. Lo script è molto semplice, prende tutti i video pubblicati, genera le loro URL (nel formato "friendly" di Vshare) nella sitemap Ne ho predisposte due versioni, una per sitemap generale e una per sitemap video.
Modifica le impostazioni nei seguenti script in base alla configurazione del tuo sito Vshare. Crea una pagina .php e passala a Google come Sitemap Sitemap Generale: <?php echo "<?xml version='1.0' encoding='iso-8859-1'?>"; echo "<urlset xmlns='http://www.google.com/schemas/sitemap/0.84'>"; //INZIO MODIFICHE - Modifica questi dati con la tua configurzione // hostname (di solito localhost) $dbhost = "localhost"; // Nome Database $dbname = "mio_database"; // Username $dbuser = "mio_username"; // Password $dbpass = "mia_password"; //FINE MODIFICHE $conn = mysql_connect($dbhost,$dbuser,$dbpass) or die("Unable to connect to MySQL."); mysql_select_db($dbname,$conn) or die("Unable to connect to Database $dbname"); $sql = "Select VID, title, adddate from video where approve=1 and active=1"; $res = mysql_query($sql,$conn) or die( "Error: " . mysql_error() ); while ($info = mysql_fetch_row($res)) { $SefUrl=strtolower(preg_replace("/[^a-zA-Z0-9]+/","-", $info[1])); //MODIFICA IL NOME DEL TUO SITO echo "<url><loc>http://WWW.MIOSITO.COM/view/".$info[0]."/".$SefUrl. "/</loc><lastmod>".$info[2]."</lastmod><priority>1</priority></url>"; } echo "</urlset>"; mysql_close($conn); ?>
Sitemap Video:
<?php echo "<?xml version='1.0' encoding='iso-8859-1'?>"; echo "<urlset xmlns='http://www.sitemaps.org/schemas/sitemap/0.9' xmlns:video='http://www.google.com/schemas/sitemap-video/1.0'>"; //INZIO MODIFICHE - Modifica questi dati con la tua configurzione // hostname (di solito localhost) $dbhost = "localhost"; // Nome Database $dbname = "mio_database"; // Username $dbuser = "mio_username"; // Password $dbpass = "mia_password"; //FINE MODIFICHE $conn = mysql_connect($dbhost,$dbuser,$dbpass) or die("Unable to connect to MySQL."); // mysql_select_db() function mysql_select_db($dbname,$conn) or die("Unable to connect to Database $dbname"); $sql = "Select VID, title, description, adddate, flvdoname, duration from video where approve=1 and active=1"; // execute SQL Command $res = mysql_query($sql,$conn) or die( "Error: " . mysql_error() ); // Retrieve Results while ($info = mysql_fetch_row($res)) { $SefUrl=strtolower(preg_replace("/[^a-zA-Z0-9]+/","-", $info[1])); $title=str_replace("&","e", $info[1]); $title=str_replace("\"","", $title); $desc=str_replace("&","e", $info[2]); $desc=str_replace("\"","'", $desc); $desc=str_replace("<","", $desc); $desc=str_replace(">","", $desc); echo "<url> //MODIFICA IL NOME DEL TUO SITO <loc>http://WWW.MIOSITO.COM/view/".$info[0]."/".$SefUrl."/</loc> <video:video> <video:content_loc>http://WWW.MIOSITO.COM/flvideo/".$info[4]."</video:content_loc> <video:player_loc allow_embed='yes'> http://WWW.MIOSITO.COM/player.swf</video:player_loc> <video:title>".$title."</video:title> <video:description>".$desc."</video:description> <video:thumbnail_loc> http://WWW.MIOSITO.COM/thumb/".$info[0].".jpg</video:thumbnail_loc> //MODIFICA SE IL SITO CONTIENE VIDEO PER ADULTI <video:family_friendly>Yes</video:family_friendly> <video:duration>".$info[5]."</video:duration> </video:video></url>"; } echo "</urlset>"; mysql_close($conn); ?>
|
|
Joomla 1.5 incorpora nativamente un motore di riscrittura delle URL piuttosto ben fatto. E' sufficiente impostare, nella sezione Sito-->Configurazione i vari parametri relativi alle "SEF Urls" usando il mod_rewrite. Prima di abilitare il mod_rewrite occorre però rinominare il file htaccess.txt (che viene copiato nella root del vostro sito) in .htaccess, per poter effettuare la riscrittura delle URL. L'unico problemino che ho riscontrato con il gestore delle URL di Joomla 1.5 è che, se il sito non è nella radice del dominio stesso (come ad esempio nel mio caso, sono su TopHost e tutto sta nella cartella /hdocs), occorre abilitare il parametro "RewriteBase /". Nessun problema comunqe, è già presente nel file .htaccess e basta eliminare il segno # che lo commenta. Joomla 1.5 scrive delle URL di questo tipo: http://miosito.com/sezione/categoria/99-categoria/99-titolo-del-mio-articolo.html ...che già di per sè non sono brutte, anzi!!! Abituato come ero a Joomla 1.0, e alle URL Duplicate di ArtioSef o altri componenti questa è proprio una manna. Ma si può fare di meglio. Il componente SmartSef, ad esempio, sebbene sia ancora in una fase Beta, si integra alla perfezione con Joomla 1.5, permettendo di avere un maggiore controllo sulle URL che vengono generate. Guardate ad esempio la URL di questo articolo, per intenderci. E' possibile, ad esempio, scegliere di mostrare o non mostrare nella URL i nomi della categoria e della sezione, di sostituire caratteri particolari (ad es. accenti o altro) con altri caratteri e simili pignolerie.
|
|
|
|
|
<< Inizio < Prec. 21 22 23 24 25 26 27 28 29 Succ. > Fine >>
|
|
Pagina 28 di 29 |
|