
Merhaba arkadaşlar,
Magento'da basit ürünleri(simple prodcut) sepete atmanızı sağlayacak PHP kodu oldukça basittir. Tek ihtiyacınız olan '$cart->addProduct()' fonksiyonudur. Bu fonksiyonla beraber ürün id ve miktarını da gönderirsiniz. Fakat grup ürünlerin sepete atılması biraz farklıdır.
Öncelikle grup ürün nedir diyenlerin sorularını cevaplandıralım. Grup ürün olarak bir ürün açarsınız ve ürüne farklı ürünler bağlarsınız. Bağlayacağınız ürünler daha önce basit olarak girilmiş ürünlerdir. "Ekran Kartları" diye bir grup ürün seçersiniz ve buna "A ekran kartı" ve "B ekran kartı" ürünlerini bağlarsınız. Müşterilerini "Ekran Kartları" ürünüe girdiği zaman bu iki üründen bir tanesini veya ikisini aynı anda dilediği miktarda sipariş edebilir. Daha detaylı bilgi isterseniz kendiniz bir grup ürün ekleyip buna bir kaç ürünü bağlarsınız ve sitenizde kontrol edebilirsiniz.
Grup ürünleri sepete ekleme işlemi de oldukça basit bir işlemdir aslında. Bunun için bir $super_grup isimli bir dizi oluşturacağız ve bu dizide bağlanan ürünlerden satın alınmak istenilenleri ve miktarlarını addProduct() fonksiyonu ile işleyeceğiz. Bunun için aşağıdaki kodu kullanacağız:
<?php
// İlgili ürünleri tutmamızı sağlayacak dizi
$super_grup = array();
// Grup ürünün id'si
$grup_urun_id = <grup_urun_id>;
// Bu grup urunde bağlanan urunlerden bizim sepete ekleteceklerimiz
$bagli_urunler = array('<bagli_urun_id_1>','<bagli_urun_id_2','<bagli_urun_id_3');
// Bu grup üründe yedi tane bağlı ürün var fakat biz üç tanesi seçtik ;) Yani isteğe göre <bagli_urun_id_4> vs. ekleyebilirdik
// Her bağlı ürün için ikişer tane sepete atalım
$adet = 2;
// Sepete atılacak bağlı ürünleri $super_grup dizisine atalım ve ürün id'lerini de dizi anahtarı olarak belirleyelim ve karşılarına da miktarlarını yazalım
foreach($bagli_urunler as $bagli_urun){
if(intval($bagli_urun)){
$super_grup[$bagli_urun] = $adet;
}
}
//Add Grouped product to cart
try {
// Grup ürün bilgileri çekmek için gerekli nesneyi yükleyelim
$urun = Mage::getModel('catalog/product')->load($grup_urun_id);
// Ürün uygun mu kontrol edelim
if (!$urun) {
echo "Hata ile karşılaşıldı!";
return;
}
// Sepet nesnesini çağıralım
$sepet = Mage::getModel('checkout/cart');
// Grup ürün için parametreleri alalım
$parametreler = array('super_group' => $super_grup);
// Ürünleri belirlediğimiz parametrelerle sepete atalım ve kaydedelim
$sepet->addProduct($urun, $parametreler)->save();
Mage::getSingleton('checkout/session')->setCartWasUpdated(true);
echo $this->__('%s sepetinize eklendi.', Mage::helper('core')->htmlEscape($urun->getName()));
}
catch (Mage_Core_Exception $e){
if (Mage::getSingleton('checkout/session')->getUseNotice(true)){
echo $this->__($e->getMessage());
}
else{
$messages = array_unique(explode("n", $e->getMessage()));
foreach ($messages as $message) {
echo "<br />".$message;
}
}
}
catch (Exception $e){
echo $this->__('Ürünü sepete ekleyemezsiniz.');
}
?>
Yukarıdaki kodda nerede ne yaptığımızı açıkladım. Umarım işinize yarar,
Kolay gelsin

Merhaba arkadaşlar,
Bugün karşılaştığım bir hatayı ve bunun çözümünü sizlerle paylaşacağım..
Durduk yere error_log dosyamda aşağıdaki hatayı almaya başladım:
PHP Warning: Unknown: open(/var/lib/php/session/sess_57a2e1be3b736579c5af4f9f4acd43f3, O_RDWR) failed: Permission denied (13) in Unknown on line 0, referer: http://xxx.com
PHP Warning: Unknown: Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/var/lib/php/session) in Unknown on line 0, referer: http://xxx.com
Nedenini bilmiyorum bir anda bu hata ortaya çıktı. Bugün bir eklenti kurdum belki de ondandır.. Biraz araştırmalarım sonunda iki satırlık komut ile bu sorunu çözebileceğimi farkettim. Bu sorunu yaşayan arkadaşlar için çözüm aşağıdaki gibi olabilir:
chown apache /var/lib/php/session chmod 777 /var/lib/php/session
Bu şekilde tekrar eski haline geliyor ve düzeliyor fakat session klasörünün izinleri çok fazla. Herkesin rahatça erişebileceği bir halde. Daha sonra biraz daha araştırdım ve varsayılan klasör izinlerini elde ettim. O da çalışıyor. Yani kullanmanızı tavsiye ettiğim klasör izinleri için gerekli komut aşağıdaki gibidir:
chown root:psacln /var/lib/php/session chmod 770 /var/lib/php/session
Benim tercihim ikincisini kullanmaktan yanadır. Siz hangisini uygun bulursanız onu kullanabilirsiniz. Umarım işinize yarar.
Kolay gelsin,

Merhaba arkadaşlar,
Önceki dersimizde "Merhaba Dünya" uygulamasını yazdık beraber. Fakat bununla beraber aklınızda bir soru oluştur. Sadece ekrana "Merhaba Dünya" yazdırmak için satırlarca kod yazdık, bunu derledik ve sonra çalıştırdık. Halbuki bunu elinizle 5 saniyede yazabilirdiniz. Fakat programlama sadece bununla sınırlı değil. İyi bir program yazdığınızda bir çok işinizi daha rahat, güvenilir ve hızlı bir şekilde gerçekleştirebilirsiniz. Fakat iyi bir program yazmadan önce değişkenler hakkında bilgi sahibi olmalısınız.
Şimdi aklınızda 5 sayısını tutun, daha sonra 2 sayısını da tutun. Şu anda hafızanızda iki farklı sayı var Şimdi sizden ilk tuttuğunuz sayıya 1 eklemenizi istiyorum. Daha sonra aklınızdaki sayılar 6(5+1) ve 2 olacaktır. Şimdi ise bu değerleri birbirinden çıkarın ve sonuç olarak 4'ü elde edin.
Siz bu işlemleri tamamen aklınızdan yaptınız. Aynı işlemler C++ ile aşağıdaki gibi yapılabilirdi:
a = 5; b = 2; a = a + 1; sonuc = a - b;
Açıkca gördüğünüz gibi çok basit bir işlemdi, çünkü çok basit iki sayı kullandık. Fakat düşünün ki bilgisayarınız milyonlarca sayıyı aklında tutuyor ve bunların hepsiyle birden matematiksel işlemler yapabiliyor.
Kesin elde edilmiş bir değer bir değişkene atayarak bunu hafızanın bir kısmında saklayabiliriz.
Her değişken bir tanımlayıcıya ihtiyaç duyar, diğer değişkenlerden ayırt edilmek için. Örneğin, önceki kodda değişken tanımlayıcılarımız a,b ve sonuc'du. Bu değişkenleri istediğimiz şekilde daha uzun biçimlerde tanımlayabilirdik. Fakat değişken tanımlayıcılarınında bir kuralları var. Şimdi onlara biraz göz atalım.
Tanımlayıcılar
Doğru bir tanımlayıcı bir veya daha fazla harf, rakam veya alttan tire(_) karakterini içerir. Boşluk veya diğer noktalama işaretleri tanımlayıcının bir parçası olamaz. Sadece harfler, rakamlar ve alttan tire geçerli karakterlerdendir. Ayrıca değişken tanımlayıcıları her zaman harf ile başlamak zorundadırlar. Ayrıca alttan tire(_) ile de başlayabilirler fakat bu tanımlamalarda değişken derleyici programın bir değişkeni ile çakışabilir bu nedenle alttan tire ile başlayarak değişken tanımlamak pek önerilmemektedir. Hiç bir şekilde rakamla başlayamaz.
Ayrıca dikkat etmeniz gereken bir kural daha var ki hep dikkatlerden kaçar. Derleyicinin veya C++'ın kendi tanımlayıcılarını kullanmamaya dikkat edin. Bunlar zaten kullanılmış tanımlayıcılardır. Bu tanımlayıcılar:
asm, auto, bool, break, case, catch, char, class, const, const_cast, continue, default, delete, do, double, dynamic_cast, else, enum, explicit, export, extern, false, float, for, friend, goto, if, inline, int, long, mutable, namespace, new, operator, private, protected, public, register, reinterpret_cast, return, short, signed, sizeof, static, static_cast, struct, switch, template, this, throw, true, try, typedef, typeid, typename, union, unsigned, using, virtual, void, volatile, wchar_t, while, and, and_eq, bitand, bitor, compl, not, not_eq, or, or_eq, xor, xor_eq
Çok Önemli: C++ harf duyarlı bir dildir. Bu küçük harflerle yazılmış bir değişken tanımlayıcınız büyük harflerle yazılmış olandan farklıdır. Önceki örnekte sonuc ile bize 4 sonucunu verecekken Sesult ile bize herhangi bir sonuç vermez çünkü böyle bir değişken tanımlı değil.
Temel veri türlü
Programla yaparken bazı değişkenleri bilgisayarın hafızasında saklamamız gerekebilir ve bilgisayar bizim ne tür bir veriyi saklamak istediğimizi öğrenmelidir ki hafızasında ona göre bir yer açsın. Çünkü, basit bir rakamın veya bir harfin veya büyük bir sayının hafızada tutacağı yerler çok farklıdır.
Aşağıdaki tabloda C++'da yer alan temel veri türleri ve bunların aralıklarını göreceksiniz:
| Ad | Açıklama | Boyut | Aralık |
|---|---|---|---|
| char | Karakter veya küçük tamsayı | 1byte | işaretli: -128 de 127 ye işaretsiz: 0 dan 255 e |
| short int (short) | Kısa tamsayı | 2bytes | işaretli: -32768 de 32767 ye işaretsiz: 0 dan 65535 e |
| int | Tamsayı | 4bytes | işaretli: -2147483648 den 2147483647 ye işaretsiz: 0 dan 4294967295 e |
| long int (long) | Uzun tamsayı | 4bytes | işaretli: -2147483648 den 2147483647 ye işaretsiz: 0 dan 4294967295 e |
| bool | Boolean - Bu sadece TRUE veya FALSE olabilir | 1byte | true veya false |
| float | Ondalıklı sayılar | 4bytes | +/- 3.4e +/- 38 (~7 basamak) |
| double | Hassas ondalıklı sayılar | 8bytes | +/- 1.7e +/- 308 (~15 basamak) |
| long double | Uzun hassas ondalıklı sayılar | 8bytes | +/- 1.7e +/- 308 (~15 karakter) |
| wchar_t | Geniş karakter | 2 veya 4 bytes | 1 geniş karakter |
Değişlerin tanımlanması
C++'da değişken kullanmak istiyorsak öncelikle bu değişkenin türünü tanımlamamız gerekmektedir. Örnek:
int a; float ondaliklisayi;
Bunlar iki tane geçerli değişken tanımlamasıdır. İlk a tanımlayıcısı ile bir tamsayı değişkeni tanımlamaktadır. İkincisi ise ondaliklisayi tanımlayıcısı ile bir rasyonel tamsayı değişkeni tanımlamaktadır.
Aynı türde birden fazla değişken tanımlamak isterseniz değişken türünü yazdıktan sonra diğer değişken adlarını virgülle ayırarak aynı satırda tanımlamayı yapabilirsiniz.
int a, b, c;
Bu şekilde a, b ve c değişkenlerinin birer tamsayı olduğunu tanımladınız. Aşağıdaki çalışma şekliyle aynı şekilde çalışır:
int a; int b; int c;
Tamsayı değişkenlerde işaretli ve işaretsizin anlamını merak edenler vardır. Yukarıdaki tabloda anlaşılmamış olabilir. İşaretli dediğimiz türlerde tanımlanan değişkenler negatif(eksi) değerler alabilir. Eğer veri türünü belirlerken işaretli veya işaretsiz olduğunuz belirlemezsek bir çok derleyici program varsayılan olarak işaretli olarak kabul eder ve o şekilde işleme sokar belirlediğini veri türünü.
shot int ve long int veri türleri yerine daha kısa olması amacıyla sadece short ve long kullanabilirsiniz:
short Yil; short int Yil;
Şimdi değişken tanımlama bir program yazılırken nasıl görünüyormuş bir bakalım:
// değişkenlerle işlemler
#include <iostream>
using namespace std;
int main ()
{
// değişkenleri tanımlama
int a, b;
int sonuc;
// islemler:
a = 5;
b = 2;
a = a + 1;
sonuc= a - b;
// sonuc'u ekrana basalım:
cout << sonuc;
// programı sonlandıralım;
return 0;
}
|
4 |
Değişkenlerin tanımlanması
Değişkenleri biraz daha farklı biçimlerde tanımlayabiliriz. Bir değişkeni tanımladığımız onun herhangi bir değerli olmaz. Fakat değişkeni tanımladığınız anda ona bir de değer vermek isteyebilirsiniz. C++'da bunu yapabilmeniz için iki yöntem var:
tur tanimlayici = deger; buna örnek olarak int a = 0; veya
tur tanimlayici(deger); buna örnek olaraksa int a(0); verilebilir. Şimdi bunlarla ilgili bir örnek verelim hemen:
#include <iostream>
using namespace std;
int main ()
{
int a=5; // değer = 5
int b(2); // değer = 2
int sonuc; // değer tanımlanmamış
a = a + 3;
sonuc= a - b;
cout << sonuc;
return 0;
}
|
6 |
Katarlara giriş
Değişkenler nümerik olmayan verileri de saklayabilirler ki bunlar katar olarak tanımlanan bir birden fazla alfanümerik karakterin yanyana gelmesiyle oluşmuş dizelerdir. Hemen basit bir örnek yapalım:
#include <iostream>
#include <string>
using namespace std;
int main ()
{
string katar = "ilk cümlem";
cout << katar;
return 0;
}
|
ilk cümlem |
Değişkenler ve veri türleri ile benim anlatacaklarım bu kadar. Saat sabah 6:10. Bu nedenle hatalarım olabilir. Lütfen kusuruma bakmayın.
Umarım faydalı olur, kolay gelsin

Merhaba arkadaşlar,
Bu makalemde her yaptığınız işlemde korkulu rüyanız olan Magento'yu nasıl son sürüme güncelleyeceğinizi anlatıyorum..
Öncelikle Magento Connect Manager adresine gidin. Alan adınızın domain.com olduğunu sayarsak ve Magento'yu da direkt olarak domain.com'a kurduğunuzu düşünürsek Magento Connect Manager'a http://www.domain.com/downloader adresinden ulaşabilirsin. Karşınıza bir giriş ekranı gelecektir. Bu ekrana admin giriş bilgilerinizi girip giriş yapıyorsunuz.
Daha sonra "Check for Upgrades" butonuna basın.. Güncellemesi bulunanların arka planı sarı renkli olmak üzere bir liste çıkacak karşınıza. Bu listede bir option list göreceksiniz. Burda şu sürüme güncelle, reinstall ve uninstall seçenekleri mevcut. Burdan en son sürüme güncellemesini seçiyorsunuz bütün hepsi için.. Bunu tek tek yapıyorsunuz. Ayrıca bu tablonun üst sağ köşesinde bulunan "Clear all sessions after successfull install or upgrade" kutucuğunu işaretleyin. Daha sonrada "Commit Changes" butonuna tıklayın. Güncelleme işleminiz gerçekleşti..
Bu adımlar çok yorucu olduysa daha kısa bir yöntem mevcut. Yine aynı sayfada "Paste extension key to install" kutucuğuna "community/Mage_All_Latest" yazın. Karşınıza farklı bir tablo gelecek. Bu tablonun hemen altında ise "Proceed" butonu mevcut. Bu butona tıklıyoruz ve yüklememizi gerçekleştiriyoruz. Fakat bu işlemin sonunda web sitenizin ana dizininde "maintenance.flag" isimli bir dosya oluşur. Siz bu dosyayı bir FTP programı aracılığıyla silmedikten sonra sitenize erişemezsiniz.
Güncellemede bazı paketlerde problemler oluşabilir. Bu problemleri şu şekilde kontrol edebilirsiniz. İlk anlattığım adımı tekrarlarsınız, eğer arka planı sarı olan bir paket yoksa kurulumunuz başarılı ile gerçekleşmiş demektir. Artık tek yapmanız gereken yönetici paneline giderek önbelleğ tazelemek ve indeksleri yenilemek olacaktır. Eğer bu iki işlemi yapmazsanız güncellemeden sonra bazı sayfalara erişmeden hata alabilirsiniz.
Dikkat: Bu güncelleme ile mevcut modifikasyonlarınızın tamamı etkilenme riski altındadır. Magento dosyalarında yaptığınız bütün değişiklikleri yeniden yapmak zorunda kalabilirsiniz.
Eğer Magento Connect Manager ile güncellemede problem yaşarsanız bu sefer imdadınıza SSH yetişiyor. Eğer SSH paneline erişiminiz yoksa bunun için Cronjob'u kullanabilirsiniz. Bunu nasıl yapacağınızı internette araştırın lütfen.
SSH ile Magento'nuzun kurulu olduğu dizine gelin ve aşağıdaki komutu çalıştırın:
./mage install http://connect20.magentocommerce.com/community Mage_All_Latest --force
Eğer bu komutu çalıştırdığınız zaman ./mage: Permission denied şeklinde bir uyarı alırsanız aşağıdaki komutu çalıştırın daha sonra tekrar yukarıdaki komutu çalıştırmayı deneyin:
chmod 550 mage
Dikkat: Lütfen bu işlemleri yapmadan Magento kurulumunuzu veritabanı dahil yedeklemeyi unutmayın. Yedekleme işlemleri uzun ve zahmentli işlemler fakat bir problemle karşılaşırsanız Magento'nuzu geri getirmek size pahalıya mal olabilir.

Merhaba arkadaşlar,
Bugün forumlarda bir soruyla karşılaştım. Bunu ve çözümünü sizlerle paylaşmak istedim. Neyse, konuyu uzatmayalım. Şimdi daha önce
<a> <b>tr</b> <c>kodlama</c> </a>
Formatındaki XML'i nasıl PHP işleyeceğimizi http://www.trkodlama.com/php-ile-xml-dosya-dan-veri-cekme-310.html bu makalede anlatmıştım. Bu sefer mevcut XML yapımız biraz daha farklı... Aşağıdaki gibi bir XML(icerik.xml olsun) yapımız olduğunda PHP kodumuz nasıl olacak onu görelim:
<eleman-info> <id>AAAAAAA</id> <aid>1111111</aid> <ce:a>ornek1</ce:a> <ce:b>ornek2</ce:b> </eleman-info>
Burada kafamızı karıştıran nokta eleman-info etiketindeki "-" işareti ve ce:a ve ce:b etiketleri.. Bunları PHP SimpleXML ile aşağıdaki şekilde kolaylıkla işleyebiliriz:
<?php
header("Content-Type: text/html; charset=utf8"); // Karakter problemi için gerekli
$a=simplexml_load_file("icerik.xml"); // içerik.xml dosyamızı çekelim
// AAAAAAA kısmını çeken kod:
echo $xml->{'eleman-info'}->id;
// 1111111 kısmını çeken kod:
echo $xml->{'eleman-info'}->aid;
// ornek1 kısmını çeken kod:
echo $xml->{'eleman-info'}->children("ce",true)->{'a'};
// ornek2 kısmını çeken kod:
echo $xml->{'eleman-info'}->children("ce",true)->{'b'};
?>
eleman-info altındaki ce:a ve ce:b'yi çekmek için SimpleXML'i yukarıda gördüğünüz gibi kullanıyoruz. Bu makaleyi yazmama vesile olan un.real ve grk3mm takma isimli arkadaşlara teşekkür ederim.
Kolay gelsin,

Merhaba arkadaşlar,
Uzun zamandır makale yazamıyordum. Bugün yeni makaleme başladım türkçe karakter probleminin çözümünü projeme eklemeyi unuttuğumdan dolayı bende türkçe karakter problemi yaşadım.. Şükür ki çözümü biliyordum. Sizlere bugün bu problemin çözümünü anlatıyorum..
Türkçe karakter çözümünün temelinde karakter setinizi UTF-8 olarak ayarlamak yatıyor..
Projelerinize bir kaç satırlık kodu eklemezseniz "ü,ı,ğ,ö,ç,ş" gibi harflerin yerine "�" gibi bir sembol çıkar. Çözümü çok basittir. Projelerinizde bir tane ayar dosyanız vardır ve bu dosyayı bütün dosylarınıza include edersiniz.. Bunu yapmıyorsanız da yapmanızı tavsiye ederim. Bu ayar dosyanızın en üstüne aşağıdaki kodu ekleyin:
header("Content-type: text/html; charset=utf-8");
Bundan sonra bir işlemimiz daha kaldı. Veritabanına bağlandığımızda girdileri UTF-8 olarak almamızı sağlayacak SQL kodlarını çalıştırmamız gerekiyor.
mysql_select_db("db_adi"); // Veritabanımızı seçtikten sonra aşağıdaki kodları ekliyoruz
mysql_query("SET NAMES 'utf8' COLLATE 'utf8_turkish_ci'");
mysql_query("SET CHARACTER SET utf8");
mysql_query("SET COLLATION_CONNECTION = 'utf8_turkish_ci'");
Bu işlemlerden sonra dosyalarınızı UTF-8 formatında kaydetmeyi unutmayın..
Kolay gelsin,
Güncel Programlama Makaleleri by TR Kodlama © 2009 is licensed under a Creative Commons Alıntı-TicariOlmayan 3.0 Unported License.