Arkadaşlar 2008 yılında LMS, scorm eğitimleri ve moodle ile fazlaca içli dışlı olmuştum.
O zamanlar ne bilen vardı doğru düzgün nede yeterli makale bulunmamaktaydı ve bu derya benim çok kafamı bulandırmıştı. O zamandan bu zamana alt yapı ve standartlarda değişiklik olmuş olabilir bunun garantisini veremeyeceğim. Sadece o zamanlardan kalma bilgilerimi faydalı olabileceğini düşünerek sizlerle paylaşıyorum.
%100 el emeği göz nurudur. Bunu bilerek okuyun ve alıntı yaparken (ç)alma çırpma olmasın lütfen 🙂
Özetle bu makalede ve devamında gelen MOODLE serisinde anlatacaklarım;
MOODLE ile Yazılım Geliştirmek isteyenlere;
MOODLE Standartları ve Genel Teknikleri..
MOODLE ile Yazılım Geliştirmek için Genel Kurallar:
1- Tüm kodlar .php uzantılı olmalı
2- Tüm şablon dosyaları .html olmalı.
3- Tüm text dosyalar Unix-Style yazı formatında olmalı (Bir çok editörde özellik mevcut)
4- Tüm php tagları <?php ile başlamalı
5- Tüm telif yazıları kalmalı gerekirse eklenebilir yenileri
6- Her dosya config.php dosyasını include (require_once) etmeli
7- Herhangibir include/require dizin olarak $CFG->dirroot yada $CFG->libdir şeklinde olmalı
8- Her dosya require_login() ve has_capability() veya require_capability(). Fonksiyonları ile doğru authenticated olmuşmu kontrol edilmeli
9- Tüm veritabanlarına erişim fonksiyonlari lib/dmllib.php dosyasındadır. Bir çok işlevsel fonksiyon burada bulunabilir. Eğer SQL yazılmak zorunda kalınırsa çapraz platformda yazılmalı (Genellikle lib.php)
10- Yeni GLOBAL Değişkenler tanımlamayın. Yalnızca moodle’ın standartları olan $CFG, $SESSION, $THEME, $SITE, $COURSE ve $USER globallerini kullanın
11- Tüm değişkenler initialize edilmeli yada kullanmadan önce isset() veya empty() ile varlığı kontrol edilmeli
12- Tüm string değişkenler dönüşebilir olmalı – lang/en_utf8 dosyası altına küçük harflerle değişken eklenip program içersinde using get_string() yada print_string() komutları ile kullanılmalı…
13- P() ve s() fonksiyonlarını dil stringini basmak için kullanmayınız. Bu fonksiyonlar tag’lı html kodları için yapılmamıştır. Bunun için exho kullanınız.
14- Tüm hatalar print_error() fonksiyonu ile basılmalı (Ekranda otomatik olarak docs wiki ye link verecektir)
15- Tüm yardım dosyaları çevrilebilir olmalı. Yeni metinler oluşturun “lang/en_utf8/help” altına ve onları helpbutton() ile çağırınız.
16- Tarayıcıdan veri çekerken (GET veya POST) otomatik olarak magic_quotes uygulanır böylelikle kolaylıkla veri tabanına yazılabilir veriler. Tüm diğer veriler için(Dosyalardan yada DB’den) addslashes() kullanılmalı insert edilmeden önce.
17- Tüm textler format_text() fonksiyonu kullanılarak ekrana basılmalı. Böyleliğkle metinler filtrelenir ve temizlenir.
18- Kullanıcı işlemleri add_to_log() fonksiyonu ile tutulmalı. Bu loglar aktivite raporları ve LOGS için kullanılır.
19- Herzaman HTML linklerini site root’una gelecek şekilde oluşturun.
Örneğin: $CFG->wwwroot/mod/blonk/view.php?id=66 => view.php?id=99 ifade eder.
20- Modüller set_config(‘varname’, $value, ‘mod/modulename’) şeklinde config değişkenleri ile tutulmalı. Son parametre modül dizinidir
21- Decimal işlemler için direkt olarak number_format() kullanmayın. format_float() ve unformat_float() kullanılabilir.
Detaylı Yazılım Teknikleri
1-Değişkenler her zaman kolay okunabilir, küçük harfli ve İngilizce olmalı.
İYİ: $quiz İYİ: $errorstring İYİ: $assignments (array objeler için) İYİ: $i (Yalnızca küçük döngüler için) KÖTÜ: $Quiz (küçük harflerden oluşmalı) KÖTÜ: $aReallyLongVariableNameWithoutAGoodReason (Hatırlanabilir olsun diye uzun yapmayınız) KÖTÜ: $error_string (birleşik olmalı)
2-Sabitler her zaman Büyük harf olmalı ve her zaman modül ismi ile başlamalı. İsimler arasında alt çizgi kullanınız.
define("FORUM_MODE_FLATOLDEST", 1);
3-Fonksiyon isimleri İngilizce kelimelerden ve küçük harflerden oluşmalı. Başlarken modül ismi ile başlamalı ve alt çizgi kullanılmalı.
function forum_set_display_mode($mode=0) { global $USER, $CFG; if ($mode) { $USER->mode = $mode; } else if (empty($USER->mode)) { $USER->mode = $CFG->forum_displaymode; } }
Aynı özellikler sınıf ve metotlarda da geçerlidir
class some_custom_class { function class_method() { ... } }
Dikkat:
class SomeCustomClass {function classMethod(){…}}, bazı yerlerde bu şekilde görebilirisiniz büyük harfli ancak bunlar genellikle 3.parti yazılımlarda görülmektedir ve standartlara aykırıdır. (ör. formslib) Olmazsa olmaz değil ama standartlara bağlı olmak takım çalışmasında özellikle çok yardımcı olacaktır size..
4- Bloklar her zaman süslü parantez ile yapılmalı. Moodle bu stili kullanır:
if ($quiz->attempts) { if ($numattempts > $quiz->attempts) { error($strtoomanyattempts, "view.php?id=$cm->id"); } }
5-Stringler her zaman tek tırnak ile yapılmalı çünkü bellekte daha az yer kaplamaktadır ve daha hızlı derlenmektedir..
$var = 'değişken olmadan bazı metinler'; $var = 'bazı özel karakterler ile örneğin yeni satır'."\n"; $var = 'Çok çok uzun metinler '.$single.' değişken ile';
6- Yazdığınız kodlara yorum tagları ekleyiniz ki sizin dışınızda kodlara erişecekler yada siz iki gün sonra sıkıntı çekmeyiniz
Tek satır ise; // şeklinde /** * birden fazla satırda * bu şekilde açıklamayı * yazmanız çok daha iyi * Hem ileride baktığınızda hatırlatıcı olacaktır */ function forum_get_ratings_mean($postid, $scale, $ratings=NULL) { if (!$ratings) { $ratings = array(); // Boş dizi Initialize ettik if ($rates = get_records("forum_ratings", "post", $postid)) { // Sırayla tüm oylar işleniyor. foreach ($rates as $rate) { ....vs.
7- Fonksiyonlar ve değişkenler dışında tüm işlemler için parantezler ile mantıksal operatör ve komutlar arasında bir boşluk basınız diğer durumlarda boşluk basmanıza gerek yok:
foreach ($objects as $key => $thing) { process($thing); } if ($x == $y) { $a = $b; } else if ($x == $z) { $a = $c; } else { $a = $d; }
8- Herhangi bir objeyi kopyalarken her zaman php5 ile gelen clone() fonksiyonunu kullanın. Moodle bu işlemi php4 ile uyumlu bir şekilde yapacaktır..
KÖTÜ: $b = $a; İYİ : $b = clone($a);
Eğer tek bir nesne kopyalamayacaksanız (Örneğin dizi => array nesneler) fullclone() kodunu kullanınız.
Kodlama yapısı genel hatları ile bu şekilde. Aslında bu moodle standartları genel anlamda php standartlarına da benzemekte ve çoğu genel syntax a uymaktadır.
İlgi ve alakaya göre Bir sonraki makalemde veri tabanı yapısından kısaca ve devamında modül geliştirme ve örnek uygulama geliştirme konusundan bahsedeceğim…
Sorularınızı yöneltebilirsiniz, iyi çalışmalar dilerim..
Merhaba;
Paylaşımınız için çok teşekkürler.
php5 ile gelen clone() kullanımının bize sağladığı avantaj nedir?
clone string vs. kopyalama için değil de daha çok hatta asıl object kopyalamak için kullanılır..