WETWORK

Corlan Adnoddau Arlein Cymraeg


Dylunio Gwefannau Dwyieithog - Rhan 2: Storio'r Iaith

Gall data iaith gael ei storio mewn sawl ffordd. Os nac ydy pHp ar gael, yna gall opsiwn javascript neu dyblygiad fod yn addas (Gweler Rhan 1). Mae'r technegau isod yn dibynnu ar pHp, ond dylai unrhyw iaith ochr-gweinyddwr (e.e. ASP) fod yn gallu cynnig yr un swyddogaethau.

Datrysiadau: mewnosod :: ffeiliau amgau :: ffeiliau a mewnosod :: databas :: MVC

Newidynnau mewnosod

Nid oes unrhywbeth anodd am hyn. Mae newidynnau (variables) yn debyg i lythrennau mewn algebra, hynny yw, gallant ddal gwerth arbennig. Mewn pHp, mae newidynnau yn dechrau gyda'r arwydd doler, '$'.

Dyma enghraifft o osod y cynnwys yn y dudalen ei hun. Mae'n cymryd bod Rhan 1 (pHp syml) wedi'i ddefnyddio:

<?php

if($iaith == "en"){

$teitl = "Here's my title";

$p1 = "Here's my paragraph";

$p2 = "Here's my second paragraph";

}else{

$teitl = "Dyma fy nheitl";

$p1 = "Dyma fy mharagraff";

$p2 = "Dyma f'ail baragraff";

}

?>


Dylai'r cod uchod gael ei roi cyn y DTD, felly bod modd rhoi teitl, geiriau allweddol a disgrifiad cywir i'r dudalen yn yr adran HEAD. Gall yr HTML canlynol i'w ddefnyddio:

<h3><?php echo $teitl; ?></h3>

<p><?php echo $p1; ?></p>

<p><?php echo $p2; ?></p>


Gall hyn fod yn iawn am dudalennau syml, ond mae'n amlwg bydd y datrysiad hwn yn anodd i'w gynnal am dudalennau cymhleth. Mae modd wneud y canlynol:

<?php

echo "<h3>{$teitl}</h3>\n<p>{$p1}</p>\n<p>{$p2}</p>";

?>


Mae'r "\n" uchod yn gwneud i'r tagiau XHTML ymddangos dan ei gilydd yn daclus (\n = 'new line'; gallwch hefyd ddefnyddio \t sy'n golygu 'tabspace' i roi mewnoliad).

Ffeiliau amgau syml

Mae ffeiliau amgau (include files) yn ddull sylfaenol mewn pHp o dynnu gwybodaeth mewn un ddogfen i ddogfen arall.

Mae lleoliad y ffeil yn bwysig iawn:

  • Ffeil yn yr un ffolder â'r ddogfen: enw'r ffeil yn unig.
  • Gallwch ddefnyddio lleoliad cymharol: '../cynnwys/ffeil.inc.php'.
  • Gallwch ddefnyddio lleoliad absoliwt OND mae hwn yn wahanol i leoliad absoliwt HTML. Mae lleoliad absoliwt pHp yn dechrau uwchben gwreiddffolder yr ardal cyhoeddus (public_html). Gallwch ddefnyddio llwybr brys ($_SERVER['DOCUMENT_ROOT'] . "/cynnwys/ffeil.inc.php"). Pam fyddech am wneud hyn? Ambell waith byddwch yn symud lleoliad eich tudalennau o un ffolder i'r llall. Dim ond bod lleoliad eich ffeiliau mewnosod yn gyson, bydd eich cyfeiriadau dal yn gywir.

<?php

include("cynnwys/{$iaith}.inc.php");

?>


Neu ar gyfer lleoliad absoliwt:

<?php

include("{$_SERVER['DOCUMENT_ROOT']}/cynnwys/{$iaith}.inc.php");

?>


Mae'r cod uchod yn rhoi ffeil iaith i mewn i'r ddogfen, e.e. os taw "cy" yw'r newidyn $iaith, bydd y ffeil cy.inc.php yn cael ei llwytho; "en", ac en.inc.php bydd yn ymddangos, ac yyb. Gallwch osod yr holl dudalen yn y ffeiliau hyn (sef cynnwys rhwng y tagiau BODY).

Mae modd defnyddio 'require' yn lle 'include' yn y cod, ond mae un gwahaniaeth pwysig. Os nac ydy'r ffeil yn bodoli, ni fydd y dudalen yn llwytho o gwbl, o leiaf gydag 'include', bydd popeth arall yn llwytho heb law'r ffeil, felly bod modd cyfeirio i dudalen arall. Ffordd arall o osod 'include' yw 'include_once', sydd yn sichrau taw unwaith yn unig bydd ffeil yn cael ei llwytho.

Mae'r dull hwn yn iawn, ond gall newid adeiledd y dudalen fod yn boen os ydych yn gorfod newid 3 neu 4 ffeil iaith oherwydd hynny. Un maintais i'r holl beth yw nid oes angen newidynnau.

Ffeiliau amgau a newidynnau

Mae sawl pecyn proffesiynol yn defnyddio ffeiliau iaith ar wahân, ond nid ydynt yn gynnwys XHTML pur, yn hytrach, maent yn gymysgedd o'r ddau ddull blaenorol: data mewn i newidynnau a chadw ffeiliau amgau. Beth yw'r mantais o hyn? Gallwch gadw adeiledd y dudalen yn gyson a gwneud newidiadau i sut mae'n edrych gydag un ffeil yn unig. Yn ogystal â hyn, os oes gan y ffeil amgau adeiledd arbennig, gallwch ddefnyddio amryw o systemau i ddod o hyd i'r data angenrheidiol (e.e. MVC, PO).

<?php

include_once("cynnwys/{$iaith}.php");

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" lang="<?php echo $iaith;?>" xml:lang="<?php echo $iaith;?>">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<meta name="description" content="<?php echo $hafan_meta_disgrifiad;?>" />

<meta name="keywords" content="<?php echo $hafan_allweddol;?>" />

<title><?php echo $hafan_teitl;?></title>

</head>

<body>

<p><?php echo $hafan_croeso;?></p>


Gallwch yna fynd ati i osod newidynnau pHp rhwng y tagiau XHTML ar bob tudalen. Yn anffodus, nid yw hwn yn hawdd iawn i'w wneud os ydych yn gwneud newidiadau yn gyson. Gall fod angen sustem mwy hyblyg arnoch, e.e. databas neu sustem dempled MVC fel Smarty. Beth bynnag, dyma enghraifft os sut fyddai ffeil amgau o'r math hwn yn edrych:

<?php

$hafan_croeso = "Croeso i'r Wefan!";

$hafan_teitl = "Croeso I'r Wefan Arbennig Hon!";

$hafan_disgrifiad = "Gwefan arbennig wedi'i chynhyrchu gan Wetwork";

$hafan_allweddol = "Wetwork, gwefan, arbennig, anhygoel, arhuthrol, ardderchog, ffantastig";

?>

Databas

Pam ydy databas yn well na ffeiliau amgau? Wel, efallai dy' nhw ddim, ac yn aml rydym yn defnyddio'r ddau ddull ochr yn ochr. Mae ffeiliau amgau yn dda dros ben ar gyfer agweddau stateg (data sydd ddim yn newid) ac mae databas yn wych ar gyfer data ehedol, sydd yn cael ei newid neu'n gyfddyddio'n gyson. Enghraifft o ddefnydd databas yw blog neu erthyglau newyddion.

Pa ddatabas? Mae pHp yn gweithio'n dda iawn gyda MySQL, a dyma'r un sydd yn cael ei ddefnyddio fel rheol. Mae pecynnau databas eraill yn gallu gweithio gyda pHp, ond dyma'r un "safonol".

Bydd angen cynllunio tablau yn ofalus os ydych yn mynd i gynnig data aml-iaith. Mae 2 prif ffordd o fynd ati, naill ai gosod colofn ar gyfer pob iaith yn y tablau sy'n cynnwys data priodol, neu'n anoddach (ond mwy cywir), adeiladu hierarchaeth i fewn i dablau nythol.

Dyma enghraifft o golofnau ychwanegol:

MAES id tudalen newidyn disgrifiad cy en it
TEIP DATA int [5] varchar [50] varchar [25] varchar [100] text text text
YCHWANEGOL prif allwedd utf-8 utf-8 utf-8 utf-8 utf-8 utf-8
DATA (e.e.) 1 /index.php hafan_teitl teitl y dudalen ar y porwr Croeso i Wefan Wetwork! Welcome to the Wetwork Website! Beth bynnag yw hyn mewn Eidaleg!
2 /index.php hafan_adeiladu dal yn cael ei adeiladu Mae'r wefan hon dal yn cael ei hadeiladu This website is under construction Beth bynnag yw hyn mewn Eidaleg!

Gallwn dynnu'r wybodaeth uchod o'r databas gan y cod isod:

$q = "SELECT * FROM tabl_cynnwys WHERE tudalen = '/index.php'";

$r = open_db($q); // swyddogaeth cwstwm i agor y set data

while($qd = mysql_fetch_array($r)){

$fy_array["{$qd['newidyn']}"] = $qd["{$iaith}"];

}


Mae'r holl wybodaeth wedi'i gosod mewn "array" o'r enw "fy_array" sy'n gallu cael ei throsglwyddo yn y ffordd ganlynol:

<p><?php echo $fy_array['hafan_adeiladu'];?></p>


Mae'n rhaid cyfaddef, ych-a-fi, cod salw dros ben. I edrych ar ddatrysiad mwy soffistigedig, bydd angen ystyried ffordd o weithio o'r enw MVC (model-view-controller).

Defnyddio 'MVC' fel Smarty

Mae system dempled fel Smarty (www.smarty.net) yn creu fframwaith proffesiynol er mwyn gosod data i mewn i dudalennau. Os oes gennych wefan syml, efallai bo hwn yn mynd dros ben llestri.

Ar gyfer pob tudalen Smarty, mae angen 2 ffeil: control (yn gorffen gyda .php) a templed (yn gorffen gyda .tpl). Un o brif fanteision Smarty yw y ffaith bod tudalennau yn cael eu creu mewn ffolder CACHE, sydd, efallai'n amlwg yn llwytho tudalennau yn gyflym iawn unwaith iddynt gael eu creu.

Mae defnydd Smarty ychydig yn rhy gymhleth i fynd mewn iddo yma oherwydd diffyg lle, ond os oes gennych sgiliau rhesymol mewn pHp, mae'n syniad i edrych arno. Er mwyn cael syniad, dyma ffeil dempled enghreifftiol - sylwch dim tagiau pHp:

<h3>{$hafan_croeso}</h3>

<p>{$hafan_p1}</p>