You are on page 1of 15

Web Programc›l›¤›

<<
Sitenizi bu menüden
mahrum b›rakmay›n
Ziyaretçinizi en son b›rakt›¤› noktada karfl›layacak yetenekte bir menü sistemine ne dersiniz? Birazc›k
çabayla harikulade özellikleri olan bir menüye sahip olabilirsiniz.

S
itelerin ifllevsellik bak›m›ndan flüphesiz en can al›c› k›sm›, kul- m›fl webmaster’lar ‹nternette y›¤›nla benzer menü script’i bulabilir-
land›klar› navigasyon ve menü sistemleridir. ‹yi tasarlanm›fl ler. Samimi söylemek gerekirse, bu menülerin ço¤unun sitenize
bir menü sistemi, sitenize görsellik ve ifllevsellik aç›s›ndan do- adapte edilmesi daha kolay. Bu tip menülere örnek olacak kullan›fll›
ping etkisi yapar. Ayn› flekilde, kötü bir menünün sitenizden neler bir menü sistemini CD’de Jenerik menü ad› alt›nda bulabilirsiniz. Bu
götürdü¤ünü tahmin bile edemezsiniz. Bu ay sizlerle oldukça etkili tip menüler birçok özelli¤ini de¤ifltirebilmenize olanak tan›salar da
ve bir o kadar da kullan›fll› bir menü çal›flmas› yapaca¤›z. bunun d›fl›nda basit de olsa ilave bir de¤iflikli¤e ihtiyac›n›z olursa ifli-
Menümüzün en önemli özelli¤i ziyaretçiler üzerinde olumlu izle- niz zor demektir. Zira karmafl›k kodlar içinde bunu yapabilmeniz için
nim b›rakacak etkileflime sahip ve teknik olarak geliflime aç›k olma- uzmanl›k derecesinde JavaScript bilgisine ve baya¤› da bir zamana
s›. Mesela menünüzdeki elemanlar› diledi¤inizce de¤ifltirebilir, bir ihtiyaç duyars›n›z. Bu ayki çal›flmam›z›n sahip olaca¤› özelliklere bu
iki t›klamayla tamamen görsel özelliklerini ve stilini de¤ifltirebilirsi- tarz menülerin sahip olamayaca¤›n› bilmenizi isterim. Üstelik bu
niz. Menü, ziyaretçinizin istedi¤i sayfaya ulaflabilmesine imkan ve- menü teknik aç›dan de¤iflikli¤e daha aç›k oldu¤undan, kendiniz me-
rece¤i gibi sitede hangi konumda bulundu¤unu da belirtebilecek. nüyü daha da gelifltirebilirsiniz. Bu ön bilgiden sonra iflimize girifle-
Bununla birlikte dilerseniz cookie’lerden (çerezlerden) faydalanarak biliriz.
menünüze çok daha ileri seviyede bir ifllevsellik katabilirsiniz. Mese-
la bir sayfaya gelindi¤inde kendili¤inden menünün o sayfaya göre Temel teknik: CSS display property’si
hal almas› ve durumunu de¤ifltirmesi gibi. Ya da ziyaretçinizi tekrar Menümüzün temelini oldukça kullan›fll› bir CSS özelli¤i, display
b›rakt›¤› yerden karfl›lamas› gibi. property’si oluflturuyor. Önce bu özellik üzerine biraz deneyim kaza-
Bunca zengin özelli¤e sahip olacak bir menü kullanman›n bir be- nal›m.
deli olmal› elbette. Bu bak›mdan bu ayki atölyenin, script’leri haz›r Display property’si tan›mland›¤› sayfa elementinin sayfa üzerin-
kullanmaya al›flm›fl webmaster’lardan çok iflin tekni¤ini ve temelini de di¤er sayfa elementleri aras›nda yer al›p almamas›n› kontrol ed-
merak eden gelifltiricilere hitap ediyor oldu¤unu söyleyebiliriz. Buna er. Bir bak›ma görünüp görünmemesini kontrol eder diyebiliriz ama
karfl›n bir defas›nda baz› fleyleri kavrad›ktan sonra menünüzü ken- hemen uyaral›m bu property DHTML uygulamalar›nda s›kça kulla-
dinize özgün olarak daha da gelifltirebilmeniz mümkün. Bu arada n›lan visibility (görünürlük) property’sinden farkl›d›r. fiöyle ki visibi-
yeri gelmiflken hemen hat›rlatal›m. Script’leri haz›r kullanmaya al›fl- lity property’si genellikle sayfa üzerine 3. boyut fleklinde konumlan-
d›r›lan katmanlar›n görünürlü¤ünü kont-
rol eder. Salt (absolute) pozisyonlama yön-
temiyle sayfaya konufllanm›fl bir katman›n
görünür olmas› ya da kaybolmas›n›n say-
fan›n geri kalan›n›n ve di¤er katmanlar›n
düzenlerinde bir etkisi olmaz. Bu özelli¤i
flimdiye kadar StudioWeb’te yer alan
DHTML uygulamalar›m›z›n bir ço¤unda
kullanm›flt›k. Bu sefer kullanaca¤›m›z disp-
lay property’si ise 2 boyut olarak düflün-
meniz gereken bir ortamda sayfan›n düze-
nini yeniden oluflturuyor. Birazdan incele-
yece¤imiz örnek ne demek iste¤imi daha
iyi aç›klayacak.
Property’mizin alabilece¤i üç muhte-
mel de¤er vard›r:
display property’sinin de¤erleri
block: Tan›mlanan elementi önüne ve ar-
kas›na birer sat›r ekleyerek ekran içeri¤i
içine katar.

152• CHIP Workshop >>


>> Web Programc›l›¤›

inline: Tan›mlanan elementi ekran içeri¤i içine katar ama önüne Bu örne¤i çal›flt›rd›¤›n›zda 4 adet radyo dü¤mesinden oluflan küçük
ve arkas›na sat›r eklemez. bir form parças›yla karfl›laflacaks›n›z. Radyo dü¤melerinden sonun-
cusunun seçilmesi durumunda, ziyaretçinizin di¤er ödeme yönte-
none: Tan›mlanan elementi ekran içeri¤i içinden kald›r›r minin aç›klamas›n› girebilmesi için kendili¤inden bir bilgi girdi alan›
belirecek. Farkl› yöntem seçildi¤inde ise bu alan yok olacak. Dene-
Bu de¤erler sayfa kodunda belirtilebilece¤i gibi, bunlar›n script ile yin.
kontrol edilebilmesi de mümkündür. Burada dikkatinizi çekmek istedi¤im nokta girdi alan›n›n görü-
nüp kaybolmas›yla sayfan›n alt›nda kalan yaz›n›n nas›l sayfan›n üst
Form.html k›sm›na uygun ola-
rak yer de¤ifltirdi¤i.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0  Buradan sayfan›n
Transitional//EN"> içeri¤inin bizim is-
teklerimize göre ta-
<html> ray›c› taraf›ndan
<head> tekrar düzenlendi¤i
<title></title> sonucunu ç›karabi-
<meta http-equiv="Content-Type"  liriz. Bu çok önemli
content="text/html; charset=windows-1254"> elbette. Zira display
<meta http-equiv="Content-Type"  property’si ile sayfa-
content="text/html; charset=ISO-8859-9"> dan kaybolma olay›
<script language="JavaScript"> asl›nda yerleflim dü-
function kontrolEt() { zeni aç›s›ndan bu
for (i=0; i<document.formum.odeme.length; i++) { blo¤un sayfadan ç›-
if (document.formum.odeme[3].checked) kar›ld›¤› ve hiç yok-
document.getElementById('sekil').style.display='block'; mufl gibi davran›ld›-
else ¤› anlam›na gel-
document.getElementById('sekil').style.display='none'; mekte. Bu bak›m-
} dan hiç bir pozis-
} yonland›rma hesap-
</script> lamas› ya da ifllemi
yapmad›¤›m›z halde
</head> sayfan›n di¤er ele-
manlar› buna göre
tamamen taray›c›
<body bgcolor="#ffffff"> taraf›ndan tekrar-
dan düzenlenmekte.

<form name="formum"> function kontrolEt() {


<b>Ödeme flekli:</b><br> for (i=0; i<document.formum.odeme.length; i++) {
<input type="radio" name="odeme" value="k"  if (document.formum.odeme[3].checked)
onclick="kontrolEt()"> Kredi kart›<br> document.getElementById('sekil').style.display='block';
<input type="radio" name="odeme" value="p"  else
onclick="kontrolEt()"> Peflin<br> document.getElementById('sekil').style.display='none';
<input type="radio" name="odeme" value="h"  }
onclick="kontrolEt()"> Havale<br> }
<input type="radio" name="odeme" value="d" 
onclick="kontrolEt()"> Di¤er<br> Bu fonksiyonun yapt›¤› ifl son radyo dü¤mesi seçildi¤i anda flarta
<span id="sekil" style="display:none"> ba¤l› olan blo¤u göstermek ya da kaybetmek. Fonksiyonumuzda en
Bu alana di¤er ödeme flekli aç›klamas›n› girebilirsiniz: önemli sat›rlar display property’sinin script’le kontrolünü sa¤layan
<input type="text" name="digerOdemeSekli"> sat›rlar
</span>
<br><br> document.getElementById('sekil').style.display='block';
Sayfan›z›n geri kalan bölümü
</form> Yukar›daki sat›r›n anlam›, sekil referans isimli sayfa elementini gös-
ter ya da
document.getElementById('sekil').style.display='none';
</body> sekil referans isimli sayfa elementini kaybet. San›r›m sekil kimlikli
</html> sayfa elementini de tan›mlam›fl olmam›z gerekti¤ini tahmin edebi-

<< CHIP Workshop • 153


Web Programc›l›¤›
<<
lirsiniz. for (var i=0; i<ar.length; i++){
if (ar[i].className=="subaltmenu"){
<span id="sekil" style="display:none"> ar[i].style.display = "none"; // 
Bu alana di¤er ödeme flekli aç›klamas›n› girebilirsiniz: E¤er baflka bir alt dü¤üm aç›k ise ayn› seviyedeki tüm alt dü¤ümleri kapat
<input type="text" name="digerOdemeSekli"> }
</span> }
}
Gördü¤ümüz bu basit örnek, form gibi web sayfas› içeri¤inin ziya- //fiimdi elementi aç
retçi ile etkileflime girebilmesini istedi¤imiz durumlarda kullanabi- el.style.display = "block";
lece¤imiz önemli bir tekni¤i kaps›yor. Bu tekni¤i kullanarak form }
alanlar›n› flarta ba¤l› olarak tekrardan düzenleyebilir, gereksiz fazla- else{
l›klar› dinamik olarak an›nda yok edebilirsiniz. Mesela bu yöntemle el.style.display = "none";
ziyaretçinizin yaz›c›dan form ç›kt›s›n› ald›¤› anda sadece ilgili alan- }
lar› sayfada gösteren uygulamalar üretebilirsiniz. }
Gelelim menümüze. Öncelikle menümüzün kodlar›n› bir defada }
görelim ve nas›l çal›flt›¤›n› test edelim.
function acil(str){ // istenen elemente ulaflana kadar aç ve seçili hale getir
Sihirlimenu.html // id namaras›n› analiz et
var param1 = str.substring(0,1)
<html> var param2 = str.substring(1,2)
<head> var param3 = str.substring(3,4)
<title></title> var param4 = str.substring(5,6)
<meta http-equiv="Content-Type" content="text/html; 
charset=windows-1254"> tumAltKapat();
<meta http-equiv="Content-Type" content="text/html; 
charset=ISO-8859-9"> if (param4==0){
<link rel=stylesheet href="stil_1.css" type="text/css"> if (param3==0){ // 
E¤er 1. seviyede linkse (dü¤üm de¤ilse) sadece seçili hale getir
<script type="text/javascript"> aktiflestir(document.getElementById(str))
<!-- }
else { // E¤er 1. seviyede dü¤ümse ..
function tumAltKapat(){ // 1. seviyeye kadar tüm altlar› kapat katla("s" + param2 + "_" + 0 + "_" + 0); // 
var ar = document.getElementsByTagName("ul"); bir üstü aç ...
for (var i=0; i<ar.length; i++){ aktiflestir(document.getElementById(str))
ar[i].style.display = "none"; // ve seçili hale getir
} }
} }
else {// E¤er 2. seviyede dü¤ümse ..
var oncekiAktif; // bir önceki aktif objeyi kaydedecek katla("s" + param2 + "_" + 0 + "_" + 0); // iki üstünü aç 
var classOncekiAktif; // bir önceki aktif objenin ola¤an class ismini  ...
kaydedecek katla("x" + param2 + "_" + param3 + "_" + 0); // 
bir üstü aç ...
aktiflestir(document.getElementById(str)) // ve 
function katla(obj){ // navigasyon seçili hale getir
if(document.getElementById){ }
var el = document.getElementById(obj); // id numaras› verili nesne }
var ar = document.getElementsByTagName("ul"); // <ul> 
tak›l› tüm elementler function aktiflestir(obj){ // seçili hale getirir
if(el.style.display != "block"){ //  deaktiflestir();
e¤er element görünür durumda de¤ilse aç // bir önceki seçili olan› kaydet
//önce di¤erlerini kapat oncekiAktif = obj; // seçili hale getirilecek element
if (obj.indexOf("x")){ classOncekiAktif = obj.className; // 
for (var i=0; i<ar.length; i++){ seçili hale getirilecek elementin ola¤an class ismi
ar[i].style.display = "none"; // 
bir üst dü¤üm aç›k ise tüm alt ve üst dü¤ümleri kapat obj.className = "secili";
} }
}
else { function deaktiflestir(){ // seçili olan› resetle 

154• CHIP Workshop >>


>> Web Programc›l›¤›

if (oncekiAktif) {oncekiAktif.className = classOncekiAktif;} id="_2_3_1">&nbsp;&nbsp;231</a></li>


} <li><a 
class="subaltlink" href="herhangi232.html" 
function degis(){tumAltKapat();} // ilk seviyeye kadar kapat  id="_2_3_2">&nbsp;&nbsp;232</a></li>
(Menüyü S›f›rla) <li><a 
class="subaltlink" href="herhangi233.html"
id="_2_3_3">&nbsp;&nbsp;233</a></li>
--> </ul>
</script> <li><a 
</head> class="altlink" href="#" onclick="katla('x2_4_0'); this.blur()">
&nbsp;240 &gt; </a></li>
<body leftmargin="0" topmargin="0"  <ul class=" 
marginheight="0" marginwidth="0"  subaltmenu" id="x2_4_0">
bgcolor="#ffffff"> <li><a 
class="subaltlink" href="herhangi241.html"
id="_2_4_1">&nbsp;&nbsp;241</a></li>
<li><a 
<!-- ÖNEML‹: id numaralar›nda en fazla 1 basamakl› bir de¤er kullan›n. class="subaltlink" href="herhangi242.html" 
10'dan fazla say›da eleman kullanacaksan›z _4_10_3 yerine _4_A_3 gibi id="_2_4_2">&nbsp;&nbsp;242</a></li>
de¤erler kullan›n. --> </ul>
<li><a 
class="altlink" href="herhangi250.html"
<a class="menuUst">Menu</a> id="_2_5_0">&nbsp;250</a></li>
<div id="menu" style="position:absolute; 
background-color:#EBEBEB; top:21; left:0; width:0;  </ul>
height:0; visibility:visible; z-index:0;">
<a class="analink" href="#"
<a id="_3_0_0" onclick="katla('s3_0_0'); this.blur()">300 &gt; </a>
class="analink" href="#" id="_1_0_0" onclick="  <ul class="altmenu"
katla('s1_0_0'); this.blur()">100 &gt; </a> id="s3_0_0">
<ul  <li><a 
class="altmenu" id="s1_0_0"> class="altlink" href="herhangi310.html"
id="_3_1_0">&nbsp;310</a></li>
<li><a  <li><a 
class="altlink" href="herhangi110.html" class="altlink" href="herhangi320.html"
id="_1_1_0">&nbsp;110</a></li> id="_3_2_0">&nbsp;320</a></li>
<li><a  <li><a
class="altlink" href="herhangi120.html"  class="altlink" href="#" onclick="katla('x3_3_0'); this.blur()">&nbsp;330
id="_1_2_0">&nbsp;120</a></li> &gt; </a></li>
</ul> <ul class="
subaltmenu" id="x3_3_0">
<a class="analink" href="#"  <li><a 
id="_2_0_0" onclick="katla('s2_0_0'); this.blur()">200 &gt; </a> class="subaltlink" href="herhangi331.html"
<ul class="altmenu"  id="_3_3_1">&nbsp;&nbsp;331</a></li>
id="s2_0_0"> <li><a 
<li><a  class="subaltlink" href="herhangi332.html"
class="altlink" href="herhangi210.html" id="_3_3_2">&nbsp;&nbsp;332</a></li>
id="_2_1_0">&nbsp;210</a></li> <li><a 
<li><a  class="subaltlink" href="herhangi333.html"
class="altlink" href="herhangi220.html" id="_3_3_3">&nbsp;&nbsp;333</a></li>
id="_2_2_0">&nbsp;220</a></li> </ul>
<li><a  </ul>
class="altlink" href="#" onclick="katla('x2_3_0'); this.blur()">&nbsp;230  <a class="analink" href=" 
&gt; </a></li> herhangi4.html" id="_4_0_0">400</a>
<ul class=" <a class="analink" href=" 
subaltmenu" id="x2_3_0"> herhangi5.html" id="_5_0_0">500</a>
<li><a  <a class="analink" href=" 
class="subaltlink" href="herhangi231.html"  herhangi6.html" id="_6_0_0">600</a>

<< CHIP Workshop • 155


Web Programc›l›¤›
<<
border-left:1px solid #EAB8D2;
border-top:1px solid #EAB8D2;
</div> /*border-right:1px dotted #7F7F7F;*/
border-bottom:1px dotted #7F7F7F;
}
<!-- Bu bölümü sonradan silebilirsiniz -->
<div style="position:absolute; top:10; left:250; width:200;
height:0; visibility:visible; z-index:0;">
1. model:<br> a.menuUst
<a href="#" onclick="acil('_1_1_0')">aç›l  {
1_1_0</a><br> display: block;
width: 200px;
<a href="#" onclick="acil('_2_4_1')">aç›l  font: 11px/19px Verdana;
2_4_1</a><br> font-weight:bold;
<a href="#" onclick="acil('_4_0_0')">aç›l  text-decoration: none;
4_0_0</a><br> padding: 0 0 0 10px;
<a href="#" onclick="degis()">ilk seviyeye  color: #ffffff;
kadar katlan</a><br> background: #B2005D;
<a href="#" onclick="deaktiflestir()">seçili  border-left:1px solid #B2005D;
olan› reset et</a><br> border-top:1px solid #B2005D;
<br> /*border-right:1px dotted #7F7F7F;*/
</div> border-bottom:1px solid #B2005D;
<!-- / Bu bölümü sonradan silebilirsiniz --> }

</body> a.analink
</html> {
display: block;
Bu kodlar› oturup yazman›z› beklemiyorum elbette. CD’deki ör- width: 200px;
nekten kopyalayabilirsiniz. Ayn› klasörde menümüzün kullanaca¤› font: 11px/18px Verdana;
stili bar›nd›ran CSS dosyas›n› da bulundurmay› unutmay›n. text-decoration: none;
padding: 0 0 0 10px;
Stil_1.css
color: #333333;
.secili background: #EBEBEB;
{ border-left:1px solid #EBEBEB;
display: block; border-top:1px solid #EBEBEB;
width: 200px; /*border-right:1px dotted #7F7F7F;*/
font: 11px/18px Verdana; border-bottom:1px dotted #7F7F7F;
text-decoration: none; }
padding: 0 0 0 10px;
a.analink:hover
color: #333333; {
background: #EAB8D2; display: block;
border-left:1px solid #EAB8D2; width: 200px;
border-top:1px solid #EAB8D2; font: 11px/18px Verdana;
/*border-right:1px dotted #7F7F7F;*/ text-decoration: none;
border-bottom:1px dotted #7F7F7F; padding: 0 0 0 10px;
}
.secili:hover color: #333333;
{ background: #DFDFDF;
display: block; border-left:1px solid #DFDFDF;
width: 200px; border-top:1px solid #DFDFDF;
font: 11px/18px Verdana; /*border-right:1px dotted #7F7F7F;*/
text-decoration: none; border-bottom:1px dotted #7F7F7F;
padding: 0 0 0 10px; }

color: #333333; a.altlink


background: #EAB8D2; {

156 • CHIP Workshop >>


>> Web Programc›l›¤›

display: block; /*border-right:1px dotted #7F7F7F;*/


width: 200px; border-bottom:1px dotted #7F7F7F;
font: 11px/18px Verdana; }
text-decoration: none;
padding: 0 0 0 10px;

color: #333333; .altmenu{display: none; margin: 0px; padding: 0px;}


background: #E2D5E6; .subaltmenu{display: none; margin: 0px; padding: 0px;}
border-left:1px solid #E2D5E6;
border-top:1px solid #E2D5E6; CSS stil dosyas›nda ne gibi de¤ifliklikleri yaparak ne gibi etki-
/*border-right:1px dotted #7F7F7F;*/ ler elde edebilece¤inize girmek istemiyorum. Onun yerine
border-bottom:1px dotted #7F7F7F; size CD’de kullan›ma haz›r 4 farkl› stil dosyas›n› sunuyorum.
} HTML sayfan›zda

a.altlink:hover <link rel=stylesheet href="stil_1.css" type="text/css">


{
display: block; Sat›r›nda CSS dosya ismini stil_2.css veya stil_3.css veya
width: 200px; stil_4.css diye de¤ifltirdi¤iniz anda tamamen farkl› görsellikte me-
font: 11px/18px Verdana; nülere an›nda sahip olabilirsiniz. Dilerseniz de¤erlerde oynama ya-
text-decoration: none; parak ne gibi sonuçlar alabilece¤inizi deneyebilirsiniz.
padding: 0 0 0 10px; Hemen menünüzü nas›l kullanaca¤›n›za gelmek istiyorum. Ön-
celikle menünüzün tepkilerini iyice test edin. Menü her harekete na-
color: #333333; s›l tepki veriyor inceleyin.
background: #DECFE3; Menünüzde teknik aç›dan bir de¤ifliklik yapmayacaksan›z sizi il-
border-left:1px solid #DECFE3; gilendiren bölüm <body> tak›lar› içinde kalan bölüm olacakt›r. Bu
border-top:1px solid #DECFE3; bölüm menümüzün iskeletini ve hiyerarflik yap›s›n› oluflturan bölü-
/*border-right:1px dotted #7F7F7F;*/ mün ta kendisi. Dilerseniz bu k›sm› sunucu-tarafl› bir uygulamayla
border-bottom:1px dotted #7F7F7F; dinamik olarak da yazd›rabilirsiniz. Dikkat etmeniz gereken tek fley
} menüdeki her bir eleman›n bir id numaras› oldu¤u ve bu numaran›n
gelifligüzel olmay›p bizzat menünün yap›s›n› belirleyen bir düzene
a.subaltlink
{
display: block;
width: 200px;
font: 11px/18px Verdana;
text-decoration: none;
padding: 0 0 0 10px;

color: #333333;
background: #FFFFFF;
border-left:1px solid #FFFFFF;
border-top:1px solid #FFFFFF;
/*border-right:1px dotted #7F7F7F;*/
Noktal› stil
border-bottom:1px dotted #7F7F7F;
}
sahip olmas› gerekti¤i. Peki bu gerekli miydi? diye sorarsan›z, menü-
a.subaltlink:hover müzün basit hareketleri için de¤il ama geliflime aç›k olmas› ve biraz-
{ dan görece¤imiz ekstra özellikleri için kesin gerekli.
display: block; Menünün yap›s›n› ve nas›l çal›flt›¤›n› daha iyi gözlemleyebilme-
width: 200px; niz için içerikler, sahip olduklar› id numaralar›na göre yaz›l›. Bilme-
font: 11px/18px Verdana; niz gerek ilk fley menüdeki elemanlar›n iki farkl› çeflitte oldu¤u: Me-
text-decoration: none; nüde yer alan bir eleman ya üzerine t›kland›¤›nda sahip oldu¤u alt
padding: 0 0 0 10px; seviyeleri gösteren veya katlayan bir dü¤üm ya da gösterecek hiç bir
alt seviyeye sahip de¤ilse t›klan›nca ilgili sayfaya gidilecek bir link.
color: #333333; Dü¤üm olan elemanlar› sa¤›nda yer alan > ok iflaretinden ay›rt ede-
background: #FBFBFB; bilirsiniz. Gördü¤ünüz üzere seviye 1’deki ilk üç eleman dü¤üm iken
border-left:1px solid #F2F2F4; son üç eleman birer link.
border-top:1px solid #F2F2F4; Menümüzde en üst seviyede (buna seviye 1 diyelim) bulunan ilk

<< CHIP Workshop • 157


Web Programc›l›¤›
<<
nu anlayacak. E¤er
bir alt seviye (sevi-
ye 3) daha ekle-
mek isterseniz se-
viye 2’deki elema-
n›n dü¤üm olmas›
gerekecek. Bu du-
rumda ayn› man-
t›ktan hareketle 2.
seviyede yer alacak
dü¤ümünüzü
x2_3_0 fleklinde
isimlendirmelisi-
niz. Bu ismin ba-
fl›nda bulunan x
harfi de script’imi-
Klasik ze bu bölümün bir
altseviye (yani seviye 3) oldu¤unu belirtiyor. Ayn› flekilde seviye 3’te
bulunan elemanlar da link ise bunlar› _2_3_1 fleklinde isimlendir-
mek gerekir. Yine ismine bakarak _2_3_1 id numaral› bir eleman›n,
menüde ikinci s›rada bulunan eleman›n üçüncü s›radaki dü¤ümü-
nün ilk linki oldu¤unu söyleyebilmemiz gerekir. Aç›klamas› kar›fl›k
gibi görünse de, mant›ksal olarak gayet düz bir yap›da oldu¤unu
fark edeceksiniz.

Bir uyar›:
E¤er ayn› eleman›n alt seviyesinde 10’dan fazla eleman yer alacaksa
id format›n› korumal›s›n›z. id numaralar›nda en fazla 1 basamakl›
bir de¤erler kullan›n. ‹ki basamakl› de¤erler için harflerden faydala-
nabilirsiniz. Mesela _4_10_3 yerine _4_A_3 gibi, 4_11_3 yerine
3 boyutlu butonlar _4_B_3 gibi bir de¤er kullan›n.
Dü¤ümlere t›kland›¤›nda alt seviyenin aç›l›p kapanmas›n› sa¤la-
yan bir fonksiyonun tetiklenmesi gerekir.

onclick="katla('x3_3_0');"

Mesela bu sat›r 331, 332, 333 no’lu elemanlardan oluflan alt me-
nüyü katl› vaziyetteyse açacak, de¤ilse katlayacakt›r. Linklerde ise
bas›l›nca ilgili sayfaya gidilece¤inden fonksiyonu ça¤›rman›za gerek
olmayacakt›r. Bu durumda sadece ilgili sayfay› link olarak yazman›z
yeterli.

. . . href="herhangi331.html" id="_3_3_1">&nbsp;&nbsp;331</a></li>
Bu noktaya kadar görünümü ve hareketleri hofl, di¤er menüler-
Modern den çok da fazla özelli¤i olmayan ama sayfaya eklemesi zahmetli bir
menüymüfl gibi görünebilir. Ama flimdi gelelim menümüzün daha
fazla neler yapabilece¤ine. Menümüzü linklerin üzerine t›klamadan
eleman›n id ismi _1_0_0 format›nda olmal›. Ayn› seviyedeki di¤er scriptsel olarak da kontrol edebilirsiniz! Bunun nas›l yap›laca¤›n›
elemanlar s›ras›yla _2_0_0, _3_0_0,... diye isimlendirilmeli. gösteren baz› kontrol linklerini ilave ettim. Görebilece¤iniz üzere,
Seviye 1’deki bir eleman (mesela _1_0_0 isimli ilk eleman) bir hiç de zor de¤il.
dü¤ümse alt›nda bar›nd›raca¤› seviyenin ad› s1_0_0 fleklinde olma-
l›. Bu ismin bafl›nda bulunan s harfi script’imize bu bölümün bir alt- <!-- Bu bölümü sonradan silebilirsiniz -->
seviye (yani seviye 2) oldu¤unu belirtiyor. Seviye 2’de bulunan ele- <div style="position:absolute; top:10; left:250; width:200; height:0;
manlar link ise bunlar _1_1_0 fleklinde isimlendirilmeli. ‹smine ba- visibility:visible; z-index:0;">
karak _1_2_0 id numaral› bir eleman›n, menüde ilk s›rada bulunan <a href="#" onclick="acil('_1_1_0')">aç›l 1_1_0</a><br>
eleman›n ikinci linki oldu¤unu söyleyebilmemiz gerekir. Bunu biz <a href="#" onclick="acil('_2_4_1')">aç›l 2_4_1</a><br>
nas›l söyleyebiliyorsak script’imiz de ayn› flekilde bu id isimlerine ba- <a href="#" onclick="acil('_4_0_0')">aç›l 4_0_0</a><br>
karak hangi eleman›n menünün neresinde bulunan eleman oldu¤u- <a href="#" onclick="degis()">ilk seviyeye kadar katlan</a><br>

158 • CHIP Workshop >>


>> Web Programc›l›¤›

<a href="#" onclick="deaktiflestir()">seçili olan› reset et</a><br> zi flart ifadesi ve script’imizin temelini oluflturan CSS display pro-
<br> perty’si ile gerçeklefltiriyor. Kolayl›k olsun diye menümüzü <ul>
</div> HTML tak›s›yla oluflturduk. Bu fonksiyonun <ul> tak›l› sayfa ele-
<!-- / Bu bölümü sonradan silebilirsiniz --> mentlerinin display property’lerine nas›l hükmetti¤ine dikkat edin.
Script’imizde ikinci önemli fonksiyon da acil(). Bu fonksiyon ise
Menümüz scriptsel olarak diledi¤iniz elemana kadar aç›l›p, o di- menü üzerine hiç t›klamadan, diledi¤iniz belirli bir eleman için me-
ledi¤iniz eleman› seçili hale getirebilecek yetene¤e sahip. Bu du- nünün aç›lmas›n› sa¤l›yor. Diyelim ki scriptsel olarak 241 nolu ele-
rumda menünüz ekmek k›r›nt›s› diye tabir edilen ve sitede hangi mana kadar menünüzün aç›l›p bu eleman› seçili hale getirmesini is-
noktada bulundu¤unuzu belirten bir ifllevi de üstleniyor. Yine script- tiyorsunuz. Bu durumda ça¤›rman›z gereken fonksiyon flu flekilde ol-
sel olarak diledi¤iniz anda seçili eleman resetlenebiliyor ya da sade- mal›: acil('_2_4_1')
ce ilk seviye aç›k olacak flekilde en kapal› hale gelebiliyor. Harika de- Ça¤r›lan fonksiyon öncelikle parametre de¤eri olan id numaras›-
¤il mi? Böylece bu katmanda kullan›m› gösterilen flekilde menünüze n› analiz ediyor.
diledi¤iniz ifllemi yapt›rabilirsiniz. Mesela bir linke t›kland›¤› anda il-
gili sayfaya gidilecekse ve menünüz için frameset kullanm›yorsan›z, param1= “_”;
t›klanan sayfan›n id ismini parametreyle bir sonraki sayfaya aktar›p param2= “2”;
sayfa yüklenir yüklenmez menünüzün ilgili eleman› gösterir hale param3= “4”;
gelmesini sa¤layabilirsiniz. Tamamen sizin yarat›c›l›¤›n›za ve prog- param4= “1”;
ramc›l›k becerinize kalm›fl. Size bir fikir vermesi aç›s›ndan önümüz-
deki ay atölyemizde bu menümüze cookie’leri adapte edece¤iz. Bu fiart ifadeleri sayesinde bu de¤erlerden script’imiz 3. seviyede bir
flekilde ziyaretçi en son hangi linke t›klam›flsa menü tekrardan o po- eleman için aç›lmas› gerekti¤ini anl›yor.
zisyonunda aç›lacak.
Fark etti¤inizi sand›¤›m üzere menüdeki her bir eleman›n kendi- if (param4==0){
ne özgü ünik bir id numaras› olmal› ve bu numara, eleman›n menü- ...
nün hangi noktas›nda oldu¤u bilgisini de tafl›mal› ki menüde script ...
yard›m›yla istedi¤imiz eleman› seçili hale getirip, menünün o ele- }
mana kadar aç›lmas›n› sa¤layabilelim. Bu da neden <body> tak›s› else {// E¤er 2. seviyede dü¤ümse ..
içinde ayr›nt›l› bir çal›flmayla menümüzü kurmam›z gerekti¤inin ya- Yani 3. seviyede bir link için aç›lacak
n›t› oluyor. katla("s" + param2 + "_" + 0 + "_" + 0);
Gelelim menümüzün nas›l çal›flt›¤›na. Asl›nda script kodlar›n›n // iki üstünü aç (s2_0_0 için aç›l) .....
yan›nda yard›mc› olacak küçük katla("x" + param2 + "_" + param3 + "_" + 0);
Script’imizde en kapsaml› ifli yapan bölüm katla() fonksiyonu. // bir üstü aç (x2_4_0 için aç›l)...
Fonksiyonumuzun yapt›¤› ifl bir dü¤üme t›kland›¤›nda alt›nda yer aktiflestir(document.getElementById(str))
alan alt seviyeyi göstermek, ikinci defa t›kland›¤›nda ise aç›k vazi- // ve (s2_4_1’i) seçili hale getir
yette olan alt seviyeyi kapatmak. Ayr›ca bir dü¤üme ait bir alt seviye }
aç›kken baflka bir dü¤üme t›kland›¤›nda aç›k olan alt seviyeyi kapa-
t›p t›klanan dü¤ümünkini açmak. Fonksiyonumuz bu ifllemleri bir di- aktiflestir() fonksiyonu belirtilen eleman›n rengini, dilenirse stili-
ni farkl› k›lmak için elemana ayr› bir CSS class’› at›yor. Bir eleman›n
seçili halinin yok edilmesi için deaktiflestir() fonksiyonu kullan›l›yor.
Bu ise seçili nesneye eskiden sahip oldu¤u ola¤an class ismini ata-
makla mümkün oluyor. Elbette eski ismin ne oldu¤unun bir yerde
kay›tl› olmas› gerekir o da

classOncekiAktif = obj.className;

sat›r›nda bir de¤iflkene kaydedilmifl durumda. Script’imizin nas›l


çal›flt›¤›n› daha detayl› incelemek için script kodlar›nda de¤ifliklik ya-
p›n ve hangi sat›r›n script’in çal›flmas›na ne tür etkisi oldu¤unu in-
celeyin.

Not:
Bu ayki atölyemizde yer alan örneklerin kaynak kodlar›n› CD’deki
StudioWeb+ bölümünde bulabilirsiniz.

Önümüzdeki ay menümüze cookie’leri adapte edece¤iz.


Kaç›rmay›n.

Numan Pekgöz
numanpekgoz@chip.com.tr

<< CHIP Workshop • 159


Linux
<<
Her ofise ayr› bir Office
Bu yaz›m›zda, Linux ortam›nda kullan›labilecek belli bafll› ofis yaz›l›mlar›n› inceleyece¤iz.

B
u yaz›m›z, dizimizdeki di¤er yaz›lar›- mifl haldeki paketinden yükleyece¤iz. Ope- bulundu¤u herhangi bir dizin olabilir. Kuru-
m›zdan farkl› olacak. Ofis paketleri- nOffice'in iki çeflit kurulumu vard›r. 'root' lumdan önceki son ad›m ise, sistemimizde-
nin kullan›m alanlar› çok genifl ve sa- kullan›c›s› ile kurdu¤umuzda sistemdeki ki Java ortam›n›n (Çal›flma ortam› JRE ya da
y›lar› da fazlaca oldu¤u için, k›s›tl› yerimizin tüm kullan›c›lar için geçerli bir kurulum ya- gelifltirme kiti JDK) OpenOffice'e tan›t›lmas›
el verdi¤ince bu paketleri iflleyecek ve içer- p›lmaktad›r. Bu say›daki örne¤imizde kulla- (Resim 3). OpenOffice, kurulmak için Ja-
dikleri yaz›l›mlar›n karfl›laflt›rmalar›n› yapa- n›c› bazl› (tek kullan›c› için) kurulum yapa- va'ya ihtiyaç duymasa da, uygulamalarda
ca¤›z. Linux için belli bafll› ofis uygulamala- ca¤›z. ‹lk ad›m olarak dosyay› çekti¤imiz di- Java ve JavaScript kullan›m›, JDBC ile veri ta-
r›na göz atarsak: zine girelim (Bu örnekte bu dizinin /ho- ban› ba¤lant›s› gibi baz› yararl› özellikleri
1 OpenOffice.org: fiu anda aç›k ve ka- me/tango/dl/office oldu¤unu varsay›yo- kullanmak için Java ortam›m›z› OpenOffi-
pal› sistemler için en verimli ofis platformu ruz.): ce'e tan›tmal›y›z. Yüksek bir ihtimalle (ve
olarak gösterilebilen ofis paketi. Aktif ola- cd /home/tango/dl/office sistemimizde Java ortam› kurulumu mev-
rak birçok iflletme halihaz›rda OpenOffice'e Elimizde (e¤er Türkçe OpenOffice 1.1.3 cut ise) OpenOffice gerekli dizinleri bulacak
geçmifl durumda. Tam ismi OpenOffice.org çektiysek) Ooo_1.1.3_tr_TR_LinuxIn- ve listeleyecektir. Buradan istedi¤imiz Java
olan bu yaz›l›mdan, yaz›m›z boyunca k›saca tel_install.tar.gz dosyas› olmal›. Öncelikle sürümünü seçebilir ya da Java ve JavaScript
OpenOffice diye bahsedece¤iz. bu dosyay› açal›m. (Dosya ve dizin isimleri, desteklenmiyor seçene¤ini seçerek Java or-
2 KOffice: KDE masaüstü ortam›na ta- çekti¤imiz dosyaya ve sürüme göre de¤ifle- tam› olmadan kuruluma devam edebiliriz.
mamen entegre olacak flekilde gelifltirilmifl bilir. Buna dikkat edersek sorunsuz bir kuru- OpenOffice, e¤er kullan›c› bazl› kurulum ya-
ofis platformu. Oldukça geliflmifl bir modü- lum yaflar›z. OpenOffice'in tek kullan›c› için p›ld›ysa (bizim örne¤imizdeki gibi) masaüs-
ler yap›ya sahip (KDE yaz›l›mlar›n›n içine kurulumu çok basittir.) tü ortamlar›n›n (KDE, Gnome vb.) menüleri-
gömülebiliyor), ayr›ca bir çok uygulamay› tar zxvf ne kendi simgesini ekleyecektir. Böylece bu
da içeriyor. Ooo_1.1.3_tr_TR_LinuxIntel_install.tar.gz menüleri kullanarak, da¤›t›m›m›zla gelen
3 GNOMEOffice: Belli bafll› GNOME ma- cd Ooo_1.1.3_tr_TR_LinuxIntel_install di¤er yaz›l›mlar gibi, OpenOffice yaz›l›mla-
saüstü ortam› yaz›l›mlar›n›n, fazla entegre ./setup r›na da kolayca eriflebilmemiz mümkün ola-
olarak çal›flmamalar›na ra¤men ayn› çat› al- komutlar›n› verdi¤imizde, bir grafik ekran cakt›r.Öncelikle OpenOffice ile beraber ge-
t›nda de¤erlendirilerek ortaya konulmufl aç›larak bize kurulumda yard›mc› olacakt›r. len yaz›l›mlara bir göz atal›m. Asl›nda Ope-
ofis platformu. Bir paket halinde de¤il, ayr› (Komut sat›r› ile u¤raflmak istemiyorsan›z, nOffice entegrasyon konusunda gayet ba-
ayr› yaz›l›mlar halinde sunulmakta. geçen say›da verdi¤imiz örnekleri kullana- flar›l› oldu¤undan bu uygulamalar› tek bir
OpenOffice rak çekti¤iniz arfliv dosyas›n› grafik ortamda çat› alt›nda çal›flan farkl› arayüzler olarak
L‹lk olarak OpenOffice yaz›l›m›na de¤ine- açabilir, yine ayn› flekilde setup dosyas›n›n düflünmemiz yanl›fl olmayacakt›r.
lim. OpenOffice, bir çok dil gibi Türkçeyi de üzerine t›klayarak kurulumu bafllatabilirsi- 1 Wretir: OpenOffice paketinin kelime
desteklemektedir. Bu yaz›l›m›n yaz›ld›¤› s›- niz. Böylece konsoldan komut girmenize ge- ifllemci ve web tasarlay›c› görevini yürüt-
rada en güncel sürümü 1.1.3 idi. Türkçe rek kalmayacakt›r.) Lisans anlaflmalar›n› ka- mektedir. Microsoft Word gibi yayg›n keli-
OpenOffice'i (75.6 MB) indirebilece¤iniz ad- bul ettikten sonra önümüze gelecek ilk ek- me ifllemci formatlar›yla uyumludur. Bu for-
res http://tr.openoffice.org/ ran, kurulum türünü belirmemizi isteyecek. matlar› açabilir ve bu formatlarda dosya
Günümüz flartlar›nda, bir ofis paketin- (E¤er sistemimizde daha önce OpenOffice kaydedebilir. (Resim 4)
den beklenen en büyük özellik, tart›flmas›z kurulu ise, güncelleme ekran› gelecektir. Bu 2 Math: ‹fllem tablosu/hesap çizelgesi
en yayg›n ofis paketi olan Microsoft Office seçenek, bize ihtiyac›m›z olmayan bileflen- (spreadsheet) yaz›l›m›d›r. Microsoft Excel,
ailesinin dosya formatlar›n› tan›yarak bun- leri yüklemeyerek sabit disk alan›ndan ta- Lotus 1-2-3 gibi yaz›l›m formatlar›n› destek-
lar› açabilmesi. Aç›k kaynak kodlu yaz›l›mla- sarruf etme imkan› sa¤lar. Standart, kulla- lemektedir. Özellikle son sürümlerde geli-
r›n bu konuda genelde zorlanmalar›n›n ne- n›c› tan›ml› ve mini olmak üzere üç çeflit ku- flen Excel makrolar›n› da çal›flt›rma özelli¤i
deni, Microsoft'un kendi formatlar›n›n yap›- rulum yapabiliriz: ile dikkat çekmektedir. (Resim 5)
s›n› gizli tutmas›d›r. Aç›k kaynak kodlu yaz›- 1 Standart kurulum: Gerekli tüm Ope- 3 Impress: Sunum haz›rlamak için kulla-
l›mc›lar, bu formatlar› inceleyerek tersten nOffice bileflenleri kurulur. n›lan yaz›l›md›r. Microsoft PowerPoint for-
mühendislik (reverse engineering) denilen 2 Kullan›c› tan›ml› kurulumu: Yüklen- mat›n› okuyabilir ve bu formatta kay›t ya-
yöntemle yap›lar›n› çözmeye çal›flmaktad›r- mesini istedi¤imiz bileflenleri seçerek kuru- pabilir. Di¤er programlarla güçlü entegras-
lar. fiunu söyleyebiliriz ki, OpenOffice gerek lumu kiflilefltirebilece¤imiz bir seçenektir.
bu formatlar› açmakta, gerekse bu format- 3 Mini kurulum: Sabit diskte yer darl›¤›
larda kaydetmekte oldukça baflar›l› olmak- çekildi¤i durumlarda, OpenOffice ortam›n›n
tad›r. Geçen yaz›m›zda, komut sat›r›n› kul- kurulumu için gereken en az yeri kullanarak
lanarak yaz›l›m derlemeyi ve yüklemeyi ö¤- kurulum yapar. Tabii ki bu flekilde yap›lan
renmifltik. OpenOffice'i de benzer bir flekil- bir kurulum ile OpenOffice'in tüm özellikle-
de yükleyece¤iz. Bu sefer farkl› olarak, çok rinden yararlanmak mümkün olmayacakt›r.
komplike bir yaz›l›m olmas› sebebiyle kay- Yaz›l›m kurarken al›fl›k oldu¤umuz gibi
nak kodundan derlemeyece¤iz (tabii yine ‹leri tuflunu kullanarak devam etti¤imizde
de istiyorsan›z sitesinden çekip derleyebilir- ise, bize kurulum dizini sorulacak. Kurulum
Resim 3
siniz, ne de olsa özgür yaz›l›m), haz›r derlen- dizini sistemde, kullan›c›m›z›n erifliminin

29• CHIP Workshop >>


>> Linux

Resim 4 Resim 6 Resim 8

yonu sayesinde haz›rlad›¤›n›z dokümanlar› mant›kl› gözükmemektedir. OpenOffice ko- sayesinde kolayca geniflletilebilir, hatta kul-
(mesela Math'de haz›rlad›¤›n›z bir durum nusunda elinizin alt›nda bulunmas›n› iste- lan›c› taraf›ndan yeni yaz›l›mlar dahi yaz›la-
grafi¤ini) sunumlar›n›zda kullanman›z di¤iniz, kapsaml›, güvenilir ve Türkçe bir bilir.Eksi yanlar›na bakt›¤›m›zda gördükleri-
mümkündür. (Resim 6) kayna¤a ihtiyac›n›z var ise, “Gelecek Linux miz:
4 Draw: Hem vektörel hem de düzlemsel Yay›nlar›” taraf›ndan yay›nlanan çok uygun • KOffice, kullan›c› havuzu çok fazla olmad›-
çizimler için kullanabilece¤imiz yaz›l›md›r. fiyata temin edebilece¤iniz kelime ifllemci, ¤›ndan fazla test edilememektedir. Bunun
AutoCAD DXF format› baflta olmak üzere bir hesap tablosu, sunum, çizim, web düzenle- getirdi¤i baz› hatalar bulunsa da, kullan›c›-
çok çizim format›n› açabilir ve bu formatta me ve formül iflleme gibi alt bafll›klar› içinde n›n bizzat rapor etmesi halinde çabucak
kay›t yapabilir. (Resim 7) bar›nd›ran OpenOffice.org kitab›n› tavsiye (genellikle ayn› gün) düzeltilmektedir.
5 Wditer/Web: Writer'›n bir parças› gibi ederim. • Kendi format› haricindeki di¤er formatlar›
düflünülebilecek bu yaz›l›m da web tasar›- KOffice tan›ma özelli¤ine sahip olmas›na ra¤men
m›nda kullanmak için gelifltirilmifltir. OpenOffice kadar yayg›n kullan›lmasa da, bu özelli¤i çok geliflmifl de¤ildir. Bu, basit
Toparlamak gerekirse, OpenOffice'in en KDE ortam›na entegre olmufl güçlü bir ofis dokümanlarda sorun ç›karmasa da, komp-
güçlü yanlar› ücretsiz, özgür, kararl› (stabil), paketidir. Genel KDE kurulumu ile gelme- leks olanlarda ç›karmaktad›r. E¤er baflka ya-
entegre ve bir çok platformu (Linux ve Win- yen sistemlerde: z›l›mlar›n (Microsoft Office gibi) formatla-
dows baflta olmak üzere) destekliyor olma- http://koffice.kde.org/ r›yla çok fazla çal›flmayacaksan›z, bu bir
s›d›r. Eksi yan›na gelecek olursak, art›k ofis problem teflkil etmeyecektir.
paketi denince akla gelen Microsoft'un Offi- GNOME Office
ce paketini standart olarak kabul edersek (ki GNOME Office, paket halinde sunulma-
dosya format› aç›s›ndan asla standart kabul sa da GNOME masaüstü ortam›nda çal›flan
etmememiz gereklidir), karfl›laflt›r›ld›¤› za- ofis yaz›l›mlar›n›n ayn› çat› alt›nda toplan-
man tam anlam›yla efl de¤er yaz›l›mlar ba- d›¤›nda ald›¤› isimdir. Tam bir ofis paketi
r›nd›rmamas›d›r (Veritaban› olarak Access olarak nitelendirilemeyece¤i için k›saca de-
ve e-posta yaz›l›m› olarak Outlook). Bu ek- ¤inece¤iz.
sikleri OpenOffice, hali haz›rda Linux üze- • Kelime ifllemci olarak AbiWord içerir. Abi-
rinde çal›flan bir çok veri taban›ndan veri Word “Herkes için kelime ifllem” slogan›yla
al›m (import) ve bu verileri iflleyifl yetenek- yola ç›km›fl ve bu konuda da baflar›l› olmufl
leriyle kapatmaya bafllam›fl, daha ileride ç›- Resim 7 bir özgür yaz›l›md›r. Henüz OpenOffice ka-
kacak sürümlerinde de tam entegrasyonu dar özelli¤e kavuflamasa da oldukça yayg›n
hedeflemektedir. E-Posta aç›s›ndan bakt›¤›- adresinden ücretsiz olarak indirilebilir. KOf- kullan›lmaktad›r.
m›zda -her ne kadar konumuzun biraz d›fl›- fice, KDE'nin çal›flt›¤› tüm ortamlarda çal›- • ‹fllem tablosu/hesap çizelgesi yaz›l›m› ola-
na ç›ksa da- ofis kullan›m› için bir çok özelli- flabilmekte ve dolay›s›yla Türkçe'yi de des- rak Gnumeric yaz›l›m›n› içerir. Gnumeric
¤iyle (Exchange ba¤lant› özelli¤i gibi) en uy- teklemektedir. KOffice çok genifl bir yaz›l›m gerçekten çok fonksiyonlu ve geliflmifl bir
gun pozisyona yerleflmifl Evolution ve Kolab yelpazesine sahiptir (Resim 8). Kelime ifl- yaz›l›m olup, Microsoft Excel gibi yayg›n
(Aç›k kaynak kodlu bir Exchange ikamesi) lemci KWord, ifllem tablosu/hesap çizelgesi formatlar› da desteklemektedir. (Resim 10)
entegrasyonuna sahip KMail gibi yaz›l›mlar yaz›l›m› KSpread, sunum program› KPresen- • Ayr›ca GNOME-DB ad› alt›nda gelifltirilen
varken tekerle¤i tekrar icat etmek aç›kças› ter ilk akla gelenlerdir. Bunlar›n yan›nda veri taban› eriflim kütüphanesi sayesinde
vektör grafikler için Karbon14, çizim için bu yaz›l›mlar çeflitli veri tabanlar›na eriflip
Krita, raporlama için Kugar ve veritaban› içindeki verileri iflleme yetene¤ine sahiptir-
olarak Kexi (flu anda KOffice paketi ile birlik- ler. Linux alt›nda kullan›lan ofis yaz›l›mlar›-
te da¤›t›lmasa da bir sonraki KOffice sürü- na, yerimiz el verdi¤ince de¤inmeye çal›flt›k.
müne dahil edilecektir) öne ç›kmaktad›r. Bir sonraki yaz›m›zda ise Linux alt›nda e¤-
KOffice'in avantajl› özelliklerine k›saca lence ve sohbet servislerinden (ICQ, MSN
göz atal›m: vb.) faydalanmak için mevcut yaz›l›mlar
• KDE'nin KParts teknolojisini destekledi¤i üzerinde duraca¤›z. Bu yaz› dizimizle özgür
için, tüm KDE yaz›l›mlar›n›n içinden ça¤›r›- yaz›l›mlar üzerine ilginizi çekmeye bafllad›-
labilir ve bu yaz›l›mlar KOffice özelliklerini ¤›m›z› umuyor, ilginize teflekkür ediyoruz.
kendi içlerinden kullanabilir. Bol Linux'lu günler dileklerimizle.
Resim 5 • Benzerlerinden çok daha performansl›d›r. Do¤aç fienol
• Ürün yelpazesi KDE'nin KParts teknolojisi dsenol@masterz.com
<< CHIP Workshop • 30
3D
<<
3ds Max’te Poly
Modelleme örnekleri
Bu ayki makalemizde, 3B modelleme araçlar›n› ve “Poly modelleme “ yöntemini kullanarak gerçekçi bir
köpek bal›¤› yarataca¤›z.

H
emen hemen tüm 3 boyutlu ani- delleme tekni¤ine de¤inece¤iz. Poly model- yabiliriz. Herkes kendine uygun olan bir tek-
masyon ve modelleme yaz›l›mlar› lemenin di¤er tekniklere göre birçok avan- ni¤i seçebilir ve bazen karmafl›k teknikler
çeflitli modelleme yöntemlerini des- taj› vard›r ve ö¤renilmesi di¤er yöntemler- bir arada da kullan›labilir. Bazen sonuç ayn›
teklerler. Animasyonlar›m›z ve 3 boyutlu den daha kolayd›r. Poly modelleme ile orga- olsa bile iki farkl› modelleyici birbirinden
uygulamalar›m›z için oluflturaca¤›m›z mo- nik ve karmafl›k yüzeyleri h›zl› ve daha opti- farkl› teknikleri seçebilir. Modelleme çok ge-
delleri farkl› yöntemlerle olufltururuz ve bu mize olarak oluflturabiliriz. Poly modelleme nifl bir kavramd›r ve her geçen gün daha da
yöntemlere her geçen gün yenileri eklen- 3dsmax in 4.0 sürümünden bu yana vard›r genifllemektedir. Farkl› 3B yaz›l›mlar› farkl›
mektedir. Tabii ki her modelleme tekni¤inin ve içeri¤i her 3dsmax sürümünde geniflle- ve birbirine benzer teknikleri bizlere sunar-
bizlere sundu¤u avantajlar ve dezavantajlar mektedir. Asl›nda “Poly” modelleme tekni¤i lar ve her birinin kendilerine has avantajlar›
vard›r, üstelik her modeli istedi¤imiz tek- “Mesh” yönteminin geniflletilmifl halidir ve vard›r. Bazen modelleme yaparken iki 3B
nikle de oluflturamayabiliriz. Çünkü kulla- “mesh” yöntemine oranla daha optimize ve yaz›l›m aras›nda bile geçifller yapabiliriz. Ör-
naca¤›m›z teknik bize ve oluflturaca¤›m›z h›zl›d›r. Poly modelleme daha çok “organik nek olarak 3ds max’te oluflturdu¤umuz bir
3B objeye ba¤l› olarak de¤iflebilir. Örnek modelleme” olarak tabir edilen karmafl›k modelin ayr›nt›lar›n› “Zbrush” gibi bir mo-
olarak, yatay ve pürüzsüz yüzeylere sahip objelerin ve yüzeylerin oluflturulmas›nda delleme yaz›l›m›yla tamamlayabiliriz ya da
olan objeleri modellerken kulland›¤›m›z kullan›l›r. Ç›kt› birimi olarak poligonlar› kul- modelleme ifllemini ayr›, animasyon ifllemi-
teknikleri, sert hatlara ve k›vr›mlara sahip land›¤›ndan daha h›zl› render sonuçlar› al›- ni daha farkl› bir yaz›l›mla tamamlayabiliriz.
modellerde kullanamayabiliriz. Herkes ken- r›z ve objemizin her ayr› bölümünde farkl› Bilmemiz gereken di¤er önemli bir nok-
dine uygun olan bir tekni¤i seçebilir ve ba- ayr›nt› seviyeleri oluflturabiliriz, bu da gerek ta: Modelleme, animasyon kadar ayr› ve ge-
zen karmafl›k teknikler bir arada da kullan›- tasar›m panellerinde gerekse modelleme nifl bir konudur ve iyi bir modelleme yap-
labilir. Bazen sonuç ayn› olsa bile iki farkl› sürecinde bize zaman ve h›z kazand›r›r. Poly mak için ayn› zamanda iyi bir çizim ve görüfl
modelleyici birbirinden farkl› teknikleri se- modellemenin “patch” ve “nurbs” gibi di¤er yetene¤ine sahip olmam›z gerekir. Modelle-
çebilir. Modelleme çok genifl bir kavramd›r yöntemlerden en belirgin fark›; modelleme- me, çeflitli aç›lardan bak›ld›¤›nda heykelt›-
ve her geçen gün daha da genifllemektedir. ye bir objeyle (örne¤in bir kutu) bafllama- rafll›¤a, illüstratörlü¤e, ressaml›¤a ve tasa-
Farkl› 3B yaz›l›mlar› farkl› ve birbirine ben- m›zd›r. Nurbs ve Patch yöntemlerinde ise r›mc›l›¤a benzer.
zer teknikleri bizlere sunarlar ve her birinin bundan farkl› olarak modelleme ifllemine 3ds max’te de çeflitli modelleme yön-
kendilerine has avantajlar› vard›r. Bazen e¤riler kullan›larak bafllan›r. Bu ay poly tek- temleri vard›r (mesh, patch, nurbs, spline,
modelleme yaparken iki 3B yaz›l›m aras›nda ni¤i ile bir köpekbal›¤› modeli oluflturaca¤›z poly) ve biz bu ay en çok kullan›lan modelle-
bile geçifller yapabiliriz. Örnek olarak 3ds ve poly modellemenin birçok özelli¤ini kul- me yöntemlerinden birisi olan “poly” mo-
max’te oluflturdu¤umuz bir modelin ayr›n- lanaca¤›z. delleme tekni¤ine de¤inece¤iz. Poly model-
t›lar›n› “Zbrush” gibi bir modelleme yaz›l›- Hemen hemen tüm 3 boyutlu animas- lemenin di¤er tekniklere göre birçok avan-
m›yla tamamlayabiliriz ya da modelleme ifl- yon ve modelleme yaz›l›mlar› çeflitli model- taj› vard›r ve ö¤renilmesi di¤er yöntemler-
lemini ayr›, animasyon ifllemini daha farkl› leme yöntemlerini desteklerler. Animas- den daha kolayd›r. Poly modelleme ile orga-
bir yaz›l›mla tamamlayabiliriz. yonlar›m›z ve 3 boyutlu uygulamalar›m›z nik ve karmafl›k yüzeyleri h›zl› ve daha opti-
Bilmemiz gereken di¤er önemli bir nok- için oluflturaca¤›m›z modelleri farkl› yön- mize olarak oluflturabiliriz. Poly modelleme
ta: Modelleme, animasyon kadar ayr› ve ge- temlerle olufltururuz ve bu yöntemlere her 3dsmax in 4.0 sürümünden bu yana vard›r
nifl bir konudur ve iyi bir modelleme yap- geçen gün yenileri eklenmektedir. Tabii ki ve içeri¤i her 3dsmax sürümünde geniflle-
mak için ayn› zamanda iyi bir çizim ve görüfl her modelleme tekni¤inin bizlere sundu¤u mektedir. Asl›nda “Poly” modelleme tekni¤i
yetene¤ine sahip olmam›z gerekir. Modelle- avantajlar ve dezavantajlar vard›r, üstelik “Mesh” yönteminin geniflletilmifl halidir ve
me, çeflitli aç›lardan bak›ld›¤›nda heykelt›- her modeli istedi¤imiz teknikle de olufltura- “mesh” yöntemine oranla daha optimize ve
rafll›¤a, illüstratörlü¤e, ressaml›¤a ve tasa- mayabiliriz. Çünkü kullanaca¤›m›z teknik h›zl›d›r. Poly modelleme daha çok “organik
r›mc›l›¤a benzer. bize ve oluflturaca¤›m›z 3B objeye ba¤l› ola- modelleme” olarak tabir edilen karmafl›k
3ds max’te de çeflitli modelleme yön- rak de¤iflebilir. Örnek olarak, yatay ve pü- objelerin ve yüzeylerin oluflturulmas›nda
temleri vard›r (mesh, patch, nurbs, spline, rüzsüz yüzeylere sahip olan objeleri model- kullan›l›r. Ç›kt› birimi olarak polygonlar› kul-
poly) ve biz bu ay en çok kullan›lan modelle- lerken kulland›¤›m›z teknikleri, sert hatlara land›¤›ndan daha h›zl› render sonuçlar› al›-
me yöntemlerinden birisi olan “poly” mo- ve k›vr›mlara sahip modellerde kullanama- r›z ve objemizin her ayr› bölümünde farkl›

13• CHIP Workshop >>


>> 3D

ayr›nt› seviyeleri oluflturabiliriz, bu da gerek


tasar›m panellerinde gerekse modelleme
sürecinde bize zaman ve h›z kazand›r›r. Poly
modellemenin “patch” ve “nurbs” gibi di¤er
yöntemlerden en belirgin fark›; modelleme-
ye bir objeyle (örne¤in bir kutu) bafllama-
m›zd›r. Nurbs ve Patch yöntemlerinde ise
bundan farkl› olarak modelleme ifllemine
e¤riler kullan›larak bafllan›r. Bu ay poly tek-
ni¤i ile bir köpekbal›¤› modeli oluflturaca¤›z
ve poly modellemenin birçok özelli¤ini kul- 2 4
lanaca¤›z.
tek seçerek flekil-6’daki gibi de¤ifltirelim.
1 Öncelikle sahnemizin ortas›nda bir adet kutumuzun üzerinde yapaca¤›m›z bütün Seçti¤imiz her noktay› Move arac› ile içeri ve
box objesi olufltural›m ve box’›m›z› sahne- de¤ifliklikler di¤er tarafa da otomatik olarak afla¤›ya do¤ru dikkatlice tafl›yal›m. Köpek-
mizin tam ortas›na alal›m. x:0 y:0 z:0. Kutu- uygulanacak. Bu bizim için büyük bir kolay- bal›¤›n›n bafl ve burun k›sm› yavafl yavafl
muzun boyutlar›n› length:41, width:48 he- l›k, çünkü simetrik nesnelerin her iki taraf› belirmifl olmal›. fiimdi ad›m 1’deki segment
ight:41 olarak ayarlayal›m ve segment da ayn›d›r. fiimdi modelimizin sadece sol ayarlar›n›n modelimizi de¤ifltirirken ne ka-
ayarlar›n› da Length segs:4, width segs:2, k›sm›yla ilgilenece¤iz ve sa¤ k›s›m, sol k›- dar belirleyici bir etken oldu¤unu görürüz.
height segs:2 olarak de¤ifltirelim. fiimdi ku- s›mdan referans al›narak oluflacak. Bu yön-
tumuzu oluflturaca¤›m›z model için ayarla- temi simetrik olan her modele uygulayabiliriz. 8 Köpekbal›¤›n›n a¤›z k›sm›n› olufltural›m.
m›fl olduk. Bu ayarlar tamam›yla de¤iflken- Edge moduna geçerek cut arac›n› seçelim.
dir ve oluflturmak istedi¤imiz modele göre 4 fiimdi kutumuzu tekrar seçelim. E¤er
herhangi bir sub-object modunda de¤ifliklik
yaparsak bunun di¤er tarafa da yans›t›ld›¤›-
n› görebilirsiniz.

5 Kutumuzu vertex seviyesine girerek,


“left” görüfl penceresindeki gibi de¤ifltire-
lim. Noktalar› seçerken faremizi sürükleye-
rek seçmemiz gerekir, çünkü böylece arkada
bulunan noktalar› da seçmifl oluruz. Kutu
art›k basit bir silindire benzedi (fiekil- 4).
5
6 Orta bulunan tüm noktalar› seçerek (sü-
1
rükleme yöntemi ile) flekil-5’teki gibi de¤ifl- Cut arac›na modify panelini biraz afla¤›ya
tirelim. kayd›rarak ulaflabiliriz. Cut’a t›klad›ktan
de¤ifliklik gösterir. E¤er baflka bir model sonra modelimizi flekil-7’deki gibi keselim.
oluflturmak isteseydik ayarlar›m›z tama- 7 Art›k “perspektif” penceresine geçelim Köpekbal›¤›n›n a¤z› olufltu.
men de¤iflebilirdi. Bu ad›mdan sonra tasa- ve kutumuzu vertex modunda noktalar› tek
r›m pencerelerinde show grid onay›n› kald›- 9 Sub object modundan ç›karak modelimi-
ral›m ve perspektif penceresinde [F4]e ba- zin di¤er yar›s›n› silelim, çünkü modelimizin
sarak kutumuzun “edge”lerini görünür k›la- gövde k›sm›n› oluflturmaya bafllayaca¤›z.
l›m (fiekil- 1) Aksi takdirde extrude uygularken içeride is-

2 fiimdi kutumuza sa¤ t›klay›p poly’e çevi-


relim. Kutumuz art›k ifllenmeye haz›r ve
modify panelinde editable poly olarak gö-
rünmeli. Modify panelinde kutumuzun ver-
tex moduna geçerek top penceresinde üst-
teki 6 noktay› da faremizi sürükleyerek se-
çelim. Böylece alttaki noktalar› da seçmifl
olduk. Delete ile bu noktalar› silelim (fiekil-2)

3 Kutumuzun yar›s›n› silmifl olduk. fiimdi


vertex modundan ç›karak kutumuz seçili
durumdayken mirror butonuna t›klayal›m.
3 6
Ayarlar› flekil-3 teki gibi de¤ifltirelim. fiimdi

<< CHIP Workshop • 14


3D
<<

7 9

temedi¤imiz yüzeyler oluflabilir. Silme iflle- meliyiz çünkü modelleme ifllemindeki her içeri yönde extrude ile göz çukurlar›n› olufl-
minden sonra modelimize symmetry modi- de¤ifliklik sonuca do¤rudan yans›yacakt›r tural›m (flekil-13).
fier’ini uygulayal›m. Ayarlar› modelimizin (fiekil-10) .
di¤er yar›s› do¤ru biçimde gözükecek flekil- Sub object modundan ç›karak modeli-
de de¤ifltirelim ve modelimize tekrar sa¤ fiimdi köpekbal›¤›n›n yüzgeçlerini yap- mizin di¤er yar›s›n› seçip silelim ve tekrar
t›klayarak editable poly’e çevirelim. Art›k mam›z için flekil-11’deki gibi edge modunda
modelimiz tek parça ve extrude ifllemi için cut ile kesme ifllemi uygulayal›m. Böylece
uygun. yeni oluflan yüzeylerden polygon moduna
geçip extrude ile yüzgeçleri ç›kartabiliriz. ‹s-
Polygon modunda modelimizin arkas›n- terseniz ayn› ifllemi kuyru¤a do¤ru tekrarla-
daki tüm yüzeyleri seçelim ve flekil-8 deki
gibi extrude ifllemi uygulayal›m, extrude ifl-
leminden sonra seçili yüzeyleri scale arac›y-
la biraz küçültelim, çünkü köpekbal›¤›n›n
gövdesi kuyru¤una do¤ru gittikçe incelme-
ye bafllar.

Extrude ifllemini kuyru¤un bafllama ye-


rine kadar belirli ölçeklerde yüzeyleri scale symmetry modifier’ini uygulay›p editable
ile küçülterek tekrar edelim (flekil-9). fiekil- poly’e çevirelim. Tekrar tek parçadan oluflan
9’da extrude iflleminin tekrarlanma s›kl›¤›- bir modelimiz oldu. fiimdi a¤›z k›sm›ndaki
n› da görebiliriz. yüzeyleri seçip içeriye do¤ru extrude uygu-
10
layal›m. Gerekli düzenlemeleri de yapt›ktan
Tekrar vertex moduna geçerek modelin sonra modelimiz flekil-14’teki modele ben-
di¤er k›sm›n› tekrar silelim ve baflta yapt›¤›- y›p modelimize baflka yüzgeçlerde ekleyebi- zemifl olmal›. Extrude ifllemleri bittikten
m›z gibi “mirror” uygulayal›m. Bu sefer liriz. sonra içeride kalan poligonlar› silebiliriz.
ayarlar› hiç de¤ifltirmeyelim. Seçimi kald›r›p
önceki parçam›z› tekrar seçelim. Perspektif Top görüfl penceresinde yüzgeçleri flekil- Modelimizin yüzgeçlerinin hizas›ndan
görüfl penceresinde modelin ortadaki nok- lendirelim (fiekil-12) . üst k›s›mda ayn› yüzgeçlerde yapt›¤›m›z gi-
talar›n› afla¤›ya do¤ru tafl›yal›m. Ayn› ifllemi bi kesme ifllemi yap›p üst yüzgeci olufltura-
üst taraftaki di¤er noktalar içinde tekrarla- Edge moduna geçip, cut ile gözleri olufl- l›m. Vertex moduna geçip yüzgece flekil ve-
yal›m. Kademeli olarak gitmeye dikkat et- tural›m, daha sonra polygon moduna geçip relim (flekil15).

8 14

15• CHIP Workshop >>


>> 3D

Modelimizin kuyru¤u için en sondaki po- flekillenmeler olufltu¤unda edge moduna ço¤u organik modelleme iflleminde kullana-
ligonlar› seçip extrude uygulayal›m. Her ext- geçip slice plane ile kuyruk bölümüne des- biliriz. Sizlerde de¤iflik objeleri seçip temel
rude iflleminden sonra scale ile “z” eksenin- tekleyici edge’ler oluflturabiliriz (flekil-16). primitiflerle modellemeye bafllayabilirsiniz.
de poligonlar› büyütelim. Bu ifllemi birkaç Herkese iyi çal›flmalar.
kez tekrarlayal›m çünkü her extrude kuyru- Tüm flekillendirmeler bittikten sonra
¤un ayr›nt›lar› için bize yeni noktalar olufltu- modelimize “meshsmooth” modifieri uygu-
racak. Extrude ifllemlerinden sonra vertex lay›p yumuflatabiliriz. Nebi YIKARO⁄LU
modunda kuyru¤u flekillendirelim. Bozuk Poly modelleme tekni¤ini hemen hemen nykaroglu@chip.com.tr

18 19

<< CHIP Workshop • 16

You might also like