Prosty Blog - Import Danych z CMSów
14 July 2008
Comments
Teraz zajmiemy się sensacyjnym tematem w postaci Importu danych z innych skryptów/CMSów. Mamy skrypt newsów i można np. zaimportować newsy z różnych CMSów.Plan Działania
- Zainstalowanie wybranego CMSa na naszym serwerze (lokalnym) korzystając z tej samej bazy danych (lecz z innym prefiksem dla porządku)- Druga opcja: wrzucenie zrzutu bazy danych z istniejącej instalacji owego CMSa do bazy z tabelami naszego bloga
- Stworzenie "chwilowego" kontrolera przenoszącego dane
- Pochwalenie się nim na forum kursu :)
Wykonanie
Na potrzeby warsztatu wybrałem świeże PHP-Fusion, prosto z pieca. Po instalacji dodałem kilka newsów:NOTKA: zazwyczaj przy przenoszeniu danych nie uda się przenieść wszystkiego w 100%. Wynika to z różnic w funkcjonalnościach dwóch skryptów jak i ewentualnie od różnic w formatach danych
Oto wstępna wersja metody:
<?php
function convert_phpf()
{
$this->load->model('News');
// pobieramy wszystko
$query = $this->db->query("SELECT * FROM fusion_news");
foreach($query->result() as $item)
{
echo 'Konwertuję '.$item->news_subject.'<BR />';
//$this->News->add_news(array('news_title' => , 'news_text' => , 'news_date' => , 'news_author' => 'Rychu'));
}
echo '<h1>Przeniesione</h1>';
}
news_subject to tytuł newsa
news_news to treść newsa
news_extended to treść "rozszerzona"
news_datestamp to czas dodania, na szczęście znacznik czasu :)
A więc otrzymujemy:
news_news to treść newsa
news_extended to treść "rozszerzona"
news_datestamp to czas dodania, na szczęście znacznik czasu :)
<?php
function convert_phpf()
{
$this->load->model('News');
$query = $this->db->query("SELECT * FROM fusion_news");
foreach($query->result() as $item)
{
echo 'Konwertuję '.$item->news_subject.'<BR />';
$this->News->add_news(array('news_title' => $item->news_subject, 'news_text' => $item->news_news.'<BR />'.$item->news_extended, 'news_date' => $item->news_datestamp ,'news_author' => 'Rychu'));
}
echo '<h1>Przeniesione</h1>';
}
$item->news_news.'
'.$item->news_extended
Jako że nasz moduł newsów nie ma "rozszerzonej" treści postanowiłem oba pola z PHP-Fusion połączyć i dodać do "treści" naszego modułu. Konwerter działa ale efekt jest taki:
'.$item->news_extended
Kodowanie ISO-8859-2 do UTF-8
Jeżeli nasz CMS stosuje na stronie kodowanie ISO-8859-2 to i dane dodane za jego pomocą będą tak kodowane. By poprawnie przenieść takie dane na stronę kodowaną w UTF-8 trzeba skorzystać z konwertera kodowania :)<?php
function convert_phpf()
{
$this->load->model('News');
$query = $this->db->query("SELECT * FROM fusion_news");
$this->load->script('utf8.class3.php');
$utfConverter = new utf8(isoToUTF);
foreach($query->result() as $item)
{
echo 'Konwertuję '.$item->news_subject.'<BR />';
$this->News->add_news(array('news_title' => $utfConverter->strToUtf8($item->news_subject), 'news_text' => $utfConverter->strToUtf8($item->news_news).'<BR />'.$utfConverter->strToUtf8($item->news_extended),'news_date' => $item->news_datestamp ,'news_author' => 'Rychu'));
}
echo '<h1>Przeniesione</h1>';
}
$this->load->script('utf8.class3.php'); $utfConverter = new utf8(isoToUTF);
$utfConverter->strToUtf8(łańcuch)
Która zwraca przekodowany z ISO na UTF łańcuch. Metodę tą wykorzystujemy przy dodawaniu danych do przekodowania treści i tytułu newsa. Efekt:
Podobnie można postępować z innymi skryptami. Jeżeli stosuje on kodowanie UTF-8 to nie potrzebny jest konwerter kodowania, jeżeli ISO 8859-2 to wiemy już jak sobie z tym poradzić.
Jeżeli mamy dużo danych do konwersji to można to robić stopniowo ustawiając w zapytaniu pobierającym dane limity.
RkBlog
Comment article