PHP foreach Döngüsünde Son Değer Değilse Virgül Ekle

determine the last iteration in a php foreach loop?()

Php'de foreach döngüsü ile değerleri aralarına virgül işareti koyarak yan yana yazdırdığınızı düşünelim. Bu durumda en sonununcu değerden sonra virgül koyulmasın istersiniz. Bu durumda son kayıt olup olmadığını array_key_last ile kontrol ederiz (aynı şekilde ilk kayıt kontrolü yapmak isterseniz array_key_first kullanabilirsiniz).

foreach ($array as $key => $value) {
    echo $value;
    if ($key !== array_key_last($array)) echo ", ";
}


PHP Fonksiyonu Çağıran Sayfa Bilgilerini Almak

debug_backtrace()

Php'de fonksiyon ve metodlar çeşitli sayfalardan çağrılabilir. Bir hata durumunda metoda parametre gönderen sayfayı görmek isteyebilirsiniz. Bu gibi hata ayıklama durumlarında kullanabileceğiniz debug_backtrace fonksiyonu için aşağıdaki kodu kullanabilirsiniz.

$trace = debug_backtrace();
$caller = array(
    "file" => $trace[1]['file'],
    "line" => $trace[1]['line'],
    "function" => $trace[1]['function'],
    "class" => $trace[1]['class'],
);
var_dump( $caller );

ÖNEMLİ NOT: Burada dikkat etmeniz gereken husus; direk olarak var_dump( debug_backtrace() ) şeklinde kullanarak bütün sonucu bastırmamanızdır. Projenize göre değişmekle birlikte MB'larca bir sonuç döndürebilir. Bu nedenle dizideki 4 değeri çıktı olarak almanızı öneririm.

var_dump yerine error dosyasına yazdırmak için var_error_log($caller) kullanabilirsiniz.

Opencart PHP Zip & Download (Ajax Method)


Opencart sayfasındaki bir butona tıklayarak dosyaları indirmek için ajax metodunu kullanabilirsiniz. Bunun için controller ve view dosyalarına ekleyeceğiniz kodlar aşağıdadır.

Controller:
public function downloadAllFiles() {
    $json = array();

    $zip_files = array(
        "file-1.jpg",
        "file-2.jpg",
        "file-3.jpg",
    );
    
    if ( count($zip_files) > 0 ) {
        $zipname = "indir.zip";
        $zip = new ZipArchive;
        $zip->open($_SERVER['DOCUMENT_ROOT']."/store/image/download/".$zipname, ZipArchive::CREATE);
        foreach ($zip_files as $file) {
          $zip->addFile($_SERVER['DOCUMENT_ROOT']."/store/image/download/".$file, $file);
        }
        $zip->close();

        //success and send zip file path
        $json['success'] = 'https://example.com/store/image/download/'.$zipname;
        $this->response->addHeader('Content-Type: application/json');
        $this->response->setOutput(json_encode($json));
    }
    else {
        $json['error'] = "İndirilecek dosya bulunamadı! Lütfen kontrol ediniz.";
        $this->response->addHeader('Content-Type: application/json');
        $this->response->setOutput(json_encode($json));
    }
}

View:
<!-- Add Download Button -->
<button id="btn-download-zip" data-loading-text="<?php echo $text_downloading; ?>" class="btn btn-info"><?php echo $text_download; ?> <i class="fa fa-download"></i></button>

<!-- Add Ajax Script -->
<script type="text/javascript">
    $(document).delegate('#btn-download-zip', 'click', function() {
        $.ajax({
            url: 'index.php?route=sale/order/downloadallfiles',
            type: 'post',
            dataType: 'json',
            beforeSend: function() {
                $('#btn-download-zip').button('loading');
            },
            complete: function() {
                $('#btn-download-zip').button('reset');
            },
            success: function(json) {
                $('.alert').remove();

                if (json['error']) {
                    $('#content > .container-fluid').prepend('<div class="alert alert-danger"><i class="fa fa-exclamation-circle"></i> ' + json['error'] + '</div>');
                }
                else {
                    //download zip file
                    window.location.href = json['success'];
                }
            },
            error: function(xhr, ajaxOptions, thrownError) {
                alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
            }
        });
    });
</script>

Imagick Vector (Pdf, Svg) to Jpg


Find best resulation and apply for all vector image.
$imagick = new Imagick();
$imagick->setResolution(100,100);
$imagick->readimage("image.svg[0]"); //or "image.pdf[0]"
/* Apply Best Resolution */
$geo=$imagick->getImageGeometry();
$geo_height = intval($geo['height']);
$geo_width = intval($geo['width']);
if ($geo_width > 800 || $geo_height > 800) {
    //do not do anything if one of them is larger than 800px
}
else {
    if ($geo_width > $geo_height) {
        $r = round(800 / $geo_width) * 150;
    }
    else {
        $r = round(800 / $geo_height) * 150;
    }
    //readimage with new resolution
    $imagick->setResolution($r,$r);
    $imagick->readimage("image.svg[0]");
}
/* Apply Best Resolution End */

Adım adım Html5 Temel Web Site Kurulumu


Html5 Web Tutorial with Folder Structure

Burada gördüğünüz klasör yapısı standart bir Html5 web projesinin ilk halidir. Bazı farklılıklar olabilir. Örneğin css, js klasörleri dist veya assist gibi bir klasör içinde yer alabilir. Fakat temel olan ve benim de tavsiye ettiğim yapı budur. Gelelim bu yapıyı güncel haliyle nasıl kuracağımıza;

Not: Burada bir backhand developer olarak bir proje yaptığınızı varsayıyorum. Yani tamamen işiniz kodlar ile. Bu işi bir program (Adobe XD, Figma vs) yapıyor iseniz zaten bu tarz frontend yazılımlar size kodları hazır halde verecektir.

1. Bir web projesi için kolları sıvadığınızda ilk iş olarak temel yapıyı oluşturmak istersiniz ve bunu güncel araçlarla kurmayı dilersiniz. Ben burada microsoft, nike gibi firmalar tarafından da kullanılan HTML5 Boilerplate'i seçtim. Bu araç size standart yapıyı verecektir.

2. https://html5boilerplate.com/ adresinden son versiyonu indirin ve tüm klasörleri sitenizin root'una upload edin.

3. Bu yapıda hazırda yerleşik olmayan ama işimizi kolaylaştıracak Bootstrap framework'ü kendimiz entegre edicez. Böylece son versiyonu kullanmış oluruz. https://getbootstrap.com/ adresinden indirip upload ediniz. Zaten css ve js olarak iki klasörden oluşmakta. Bunları mevcut olanların içine eklemiş olacaksınız.

4. index.html sayfanızın head bölümünde tüm css'lerin en üstüne bunu ekleyin:

<link rel="stylesheet" href="css/bootstrap.min.css">

5. Bu iki js dosyasını (yok ise popper.min.js indirip upload edin) jquery dosyasının çağırıldığı koddan sonraya ekleyin:

<script src="js/popper.min.js"></script>
<script src="js/bootstrap.min.js"></script>

6. Şablonunuz hazır. Artık header, content ve footer bölümlemelerinizi yaparak sayfanızı tasarlayabilirsiniz.

Bu yazıda sizlere temel ve güncel bir HTML5 şablonunun nasıl oluşturulacağını anlatmaya çalıştım.

Php Oturum Zamanını Belirlemek (session_start time)

Php Oturum Zamanını Belirlemek | Setting Php Session Time

Php'de session_start() fonksiyonu ile oluşturduğunuz standart oturum zamanı 1440sn (24dk) dir. Bunu uzatmak veya kısaltmak isterseniz .htaccess dosyasınızın en altına şu satırı eklemeniz yeterli olacaktır.

php_value session.save_path /home/xxx/session
php_value session.gc_maxlifetime 172800

Böylece kullanıcı 48 saat boyunca birşey yapmasa bile oturumu sonlanmayacaktır. Tabiki bu süre size kalmış. Bu kadar. Bu htaccess kodunun ne anlama geldiğini aşağıda bulabilirsiniz.

(Ayrıntı):
1. satırda php'de oturum dosyalarının kaydedildiği klasörü belirliyoruz. Standart olarak bu klasör public_html dışında kalan /tmp klasörüdür. Biz yine public_html dışında kalacak şekilde root klasöründe (çünkü bu klasöre erişim olmamalıdır) /session adlı bir klasör oluşturup htaccess de bu yolu belirttik. /home/xxx/session yolunu buna göre belirtmelisiniz.
2. satırda bu klasör içerisine oluşturulacak session dosyalarının ömrünü belirttik. 1. satırı yazmazsanız bu komut işe yaramayacaktır. Çünkü standart /tmp klasörü belli aralıklarla boşaltılmaktadır.

Wordpress ThemeForest Temasını Güncelleme (Envato Market)


Wordpress ThemeForest Temasını Güncelleme (Envato Market)
Update Wordpress ThemeForest Theme (Envato Market)


  1. https://envato.com/market-plugin/upgrading/ adresinden "Envato Market" eklentisini indirin (eski Envato Toolkit eklentisini kurmayın).
  2. İndirdiğiniz zip dosyasını eklentiler menüsünden "yeni ekle" butonuna tıklayarak kurun ve aktifleştirin.
  3. Sol menüye gelen Envato Market menüsüne tıklayın.
  4. Burada Api token bilgisini girmeniz için bir kutu var. Bu token kodunu almak için yine bu settings sekmesinde "clicking this link" yazan yere tıklayın. Sizi token alacağınız Envato sitesine yönlendirecek. 
  5. Burada bir token name yazmanızı isteyecek yazın ve altta izin kutularından şu üçünü seçin (bu üçünden başka seçmeyin! hata oluşuyor)
    1. View and search Envato sites
    2. Download your purchased items
    3. List purchases you've made
  6. Sonra Terms and Conditions kutusunu işaretleyip "Create Token" tıklayın.
  7. Size token kodunu verecek. Kopyalayın ve kutucuğu işaretleyip düğmeye tıklayın.
  8. Bu token kodunu 4. aşamada bahsettiğim kutuya girin ve Save Changes düğmesine tıklayın. Başarılı mesajını aldıysanız bir de Test Api Connection düğmesine tıklayın. Yine başarılı mesajını almışsanız artık güncellemeleri alabilirsiniz demektir.
  9. Envato Market > Themes sekmesinde update varsa göreceksiniz ve update linkine tıklayınca otomatik olarak temanız güncellenecektir.
  10. İşte bu kadar!

Wordpress Upload Edilen Medyaların Dosya Adını Değiştirme



Wordpress upload edilen medyaların adını değiştirme

Wordpress rename uploaded file


Normalde upload ettiğiniz dosyaların adını değiştiremezsiniz. Hatta bunu ftp'den yaparsanız wordpress bu dosyayı bulamaz ve hata oluşur. Uyguladığım en iyi çözümü anlatacağım.

  1. Phoenix Media Rename eklentisini kurunuz.
  2. Bu eklentiyi kurduktan sonra ortam (media) menüsünden dosyanın edit sayfasını açın. 
  3. Filename adlı kutudan yeni ismi verin ve güncelleyin. Hepsi bu kadar. 
  4. Eğer dosyanın kalıcı bağlantısını (permalink) değiştirmek istiyorsanız; aynı edit sayfasında yazı kısa ismi (permalink) kutusuna yazmanız yeterli olacaktır (bu kutu görünmüyorsa Ekran Tercihleri'nden açınız).

WordPress wp-config.php Dosyasını Koruma (dogushan.com)


Alıntı yapılmıştır, kaynağından okumak için lütfen tıklayınız:
https://www.dogushan.com/wordpress-wp-config-php-dosyasini-koruma/

WordPress wp-config.php Dosyasını Koruma:

Sitenize olan saldırıları önlemek için mutlaka yapmanızı öneririm.

Çözüm:

  • wp-config.php dosya iznini (CHMOD) 600 yapın. (400 yapınca wordpress admin panel pluginleri bu dosyada işlem yapamıyor. Örneğin WP Super Cache eklentisi gibi)
  • .htaccess içine bu kodu yapıştırıp kaydedin.
    <files wp-config.php>
    order allow,deny
    deny from all
    </files>
    

En çok kullanılan CHMOD değerleri:

400     r--------       files (won't let you accidentally erase)

444     r--r--r--      files (lets everyone read)

600     rw-------     files (no one else can read or see files)

644     rw-r--r--      files

664     rw-rw-r--      files

666     rw-rw-rw-     files

700     rwx------          programs and directories

750     rwxr-x---          programs and directories

755     rwxr-xr-x          programs and directories

777     rwxrwxrwx     programs and directories

WordPress: Yazının ilk kategorisini yazdırma


WordPress yazının ilk kategorisi | Wordpress first category of the post:

WordPress'de yazılara kategori ekleyebiliriz. Fakat kategori fonksiyonları tüm kategorileri bize çıktı olarak vermektedir. Peki sadece ilk kategoriyi (veya ikinciyi ..vs) ekrana yazdırmak istiyorsak ne yapmalıyız?

Çözüm:

Bu kodu yazdırmak istediğiniz sayfanın kodları içine ekleyin.
term_id ) ) . '">' . esc_html( $categories[0]->name ) . '
'; } ?>

2018 En İyi Wordpress Eklentileri



2018 En İyi Wordpress Eklentileri | 2018 Best Wordpress Plugins
Son Güncelleme | Last Update: 21.12.2018

  • Bir çok eklenti arasından en kullanılışlı gördüklerimi (en çok indirilenleri değil) sizlerle paylaşacağım. 
  • Hepsini kullandım ve sizlere öneriyorum. Genelde pro veya premium kısıtlaması olmayan tamamen ücretsiz eklentileri seçtim. 
  • Kullanım amaçlarına göre listeleyeceğim. 
  • Yazılan eklenti adlarını kopyalayıp Admin > Plugins > Add New tıklayarak aratınız.

HER SİTE İÇİN GEREKEN EKLENTİLER

Wordpress url içinden category ifadesini kaldırma / Wordpress remove category from url
Yoast SEO
Kurduktan sonra Yoast > Search Appearance >  Kategoriler > Category URLs seçeneğini Kaldır olarak belirleyin.

Wordpress backup and restore
UpdraftPlus - Backup/Restore
Bence en iyi backup alma eklentisi. Sitenizin komple yedeğini alabilir, bu arşivin içine girebilir. Ayrı ayrı veya komple geri yükleme yapabilirsiniz. İsterseniz yedekleri indirme imkanı da veriyor.

Wordpress url içinden tag ifadesini kaldırma / Wordpress remove tag from url
WP No Base Permalink
Kurduktan sonra Settings > Permalinks >  Disabled Tag Base kutusunu işaretleyin.

Wordpress siteyi bakım veya yakında moduna alma / Wordpress Coming Soon & Maintenance
CMP - Coming Soon & Maintenance Plugin
Bu eklentinin diğerlerinden farkı white list ve black list yapabilmeniz. Yani sadece anasayfa linki için bakım moduna alıp, diğer linklerin açılmasına izin verebilirsiniz...

Wordpress yazı ve sayfaları çoğaltma / Wordpress duplicate post and page

Duplicate Page and Post
Yazı ve sayfaların alt kısmına Duplicate butonu eklenir.

Wordpress sayfaları önbellekleme / Wordpress cache page

WP Super Cache
Sayfaları ve yazıları cache'e alabilir veya kapatabilirsiniz. Ben daha çok bir eklentide değişiklik yapıp sitede hala eski halini görünce, cache'i boşaltmak için kullanıyorum.

Wordpress başlık alanına video-resim ekleme / Wordpress add video-image into header

Advanced WordPress Backgrounds
Çok aradım ve şiddetle tavsiye ederim. Header alanında bir video oynatmak istiyordum ama mobilde bir türlü video görünmüyordu. Bu eklenti sorunu çözdü. Tabiki resim, youtube veya kendi videolarınızı da ekleyebilirsiniz. Seçenekleri gayet tatmin edici.

Wordpress SMTP mail ayarları  / Wordpress SMTP mail settings

WP Mail SMTP by WPForms
Site üzerinden mail göndermek istiyorsanız (Contact Form 7...vs)
öncelikle bu eklentiyi kurmalısınız ve gereken mail bilgilerini girmelisiniz.

Wordpress iletişim formu/ Wordpress contact form

Contact Form 7
En beğendiğim iletişim formu eklentisidir.

Wordpress abone ol listesi / Wordpress subscriber list

Newsletter
Bu eklenti sitenize abone ol formu eklemektedir. Listeyi yönetebilir, toplu mail atabilir, mail şablonları oluşturabilirsiniz. Çok kapsamlıdır.

Wordpress ziyaretçi sayacı / Wordpress visit counter

Count per Day
Sade ve basit bir ziyaretçi sayacı eklentisidir. Günlük, aylık, sayfa başı...vs tıklama istatistiklerini verir. Başlangıç menüsü altında bulacağınız kendine özel Dashboard sayfası güzel tasarlanmıştır.

Wordpress sosyal medya ikonları ekleme / Wordpress add social media icons

Social Media and Share Icons (Ultimate Social Media)
Sitenizin herhangi bir yerine sosyal medya hesapları ikonlarını ekler.

Wordpress sitenize farklı dil seçenekleri ekleme / Wordpress add multi language

WPML Multilingual CMS
Dil menüsünü özelleştirebilirsiniz. Sayfaları düzenleme ekranında sağ tarafta görünür ve + butonuna tıklayarak o dil için sayfanıza çeviri ekleyebilirsiniz. İçeriği TR den kopyala diyerek aynı içeriği alıp ilgili yerleri çevirirsiniz.

Wordpress sitenizde ziyaretçi yorumlarını gösterme / Wordpress show testimonials

Strong Testimonials
Anasayfanıza ziyaretçi yorumlarını slider olarak eklemek için kullandım. Ayarları oldukça fazla. Örneğin slide geçişleri, butonlar, sayfalama, ...vs
Wordpress upload edilen medyaların adını değiştirme / Wordpress rename uploaded file
Phoenix Media Rename
Normalde upload ettiğiniz dosyaların adını değiştiremezsiniz. Hatta bunu ftp'den yaparsanız wordpress bu dosyayı bulamaz ve hata oluşur. Bu eklentiyi kurduktan sonra ortam (media) menüsünden dosyanın edit sayfasını açın. Filename adlı kutudan yeni ismi verin ve güncelleyin. Hepsi bu kadar. Eğer dosyanın kalıcı bağlantısını (permalink) değiştirmek istiyorsanız; aynı edit sayfasında yazı kısa ismi (permalink) kutusuna yazmanız yeterli olacaktır (bu kutu görünmüyorsa Ekran Tercihleri'nden açınız).

Wordpress indirme yöneticisi / Wordpress download management

Download Monitor
Download Manager eklentisi ile neredeyse aynı fakat özellikle Türkçe desteği olmak üzere daha iyi olduğunu test ettim. Sitenizden indirilen dosyaları izlemek, özel indirme sayfası ve butonu koymak, indirme sayasını bilmek için kullanabilirsiniz

Wordpress galeri / Wordpress 
gallery
Photo Gallery (by Photo Gallery Team)
Kasım 2018 itibariyle galeri eklentileri içinden %80'ini test ettim. Sonuç olarak Photo Gallery yüzlerce resmi işleyebilmesi, etiketleyebilmesi, sıralayabilmesi, arama imkanı vermesi, filtreleme-search box butonlarını galeriye ekleme imkanı vermesi, sayfalama yada daha fazla yükle opsiyonlarının olması, title bilgilerini alabilmesi gibi aradığım özellikleri barındırdığı için tercih ettim. Bana göre eksi tarafı; wordpress'e eklenen fotoğraflar bile olsa bunları kendisinin tekrar ayrı bir klasöre import etmesi, bu disk kullanımını arttırmaktadır, fakat görselleri tehlikeye atmaması yönüyle bi yönüyle de iyi bir özellik. Eğer bu sizin için önemli ise Envira Gallery eklentisini alternatif olarak önerebilirim. Diğer eklentiler de bu saydığım özelikler bir yönüyle yok. Ben özellikle yüzlerce resmi barındırıp sağlıklı bir şekilde görüntüleyen bir eklenti bulma konusunda zorluk yaşadım. Photo Gallery bu yönüyle tercih edilebilir.

..devamı gelecektir.

PROJEYE ÖZEL EKLENTİLER

Wordpress  yazıları grid şeklinde listeleme / Wordpress show posts like grid view

Post Grid
Content Views (satın almak isterseniz görünüm modları çok hoş olan bir eklenti)
Ayarları esnek. Pinterest gibi (masonry) görünüm seçenekleri mevcut.

Wordpress  ziyaretçi defteri ekleme / Wordpress add guestbook

Gwolle Guestbook
Oku ve yaz sayfaları ve kendi database'i var. TR için bazı düzenlemeleri var fakat %100 Türkçe yapmak için plugin kodlarında değişiklik yapmanız gerekecektir.

Wordpress  fotoğrafları grid şeklinde gösterme / Wordpress photo grid

PhotoBlocks Grid Gallery
Fotoğrafları grid şeklinde gösterebilir ve üzerine metin ekleyebilirsiniz. Responsive ve şık bir görünüme sahip.

Wordpress  fotoğrafları tab'lı albümler olarak gösterme / Wordpress make album with tab

Portfolio Filter Gallery
Üst tarafında tab menüsü olan bir albüm oluşturabilirsiniz. Bu tab'lara göre ilgili fotoğraflar filtrelenecektir. Fotoğrafları grid şeklinde gösterir.

Wordpress içeriğinizi timeline şeklinde listeleme / Wordpress add events timeline

Rich Event Timeline
Aşağı doğru veya yana doğru (vertical or horizantal) zaman çizelgesi oluşturmanızı sağlar. Metin yada resim ekleyebilirsiniz. TR için ay isimlerini kodlardan düzenlemeniz gerekecektir.
..devamı gelecektir.

Wordpress: Veritabanına kayıt limiti


Yeni kayıt ekleyemiyorum:
Wordpress panelinden yazı, sayfa veya herhangi bir plugin içinde yeni bir kayıt eklemek istediğinizde olmuyorsa, bunun nedeni php.ini dosyasında belirlenen input limiti olabilir (max_input_vars). Bu değeri arttırarak sorunu çözebilirsiniz. Fakat bazen php.ini dosyasına erişmek imkansız olabiliyor. Bu nedenle htaccess yöntemini önereceğim.

Çözüm:
- Öncelikle Cpanel > Select PHP Version > Php 7 olarak belirleyin.
- Cpanel > Dosya Yöneticisi > .htaccess dosyasını açın. Dosya yönetecisi ayarlarında "Gizli dosyaları göster" açık olmalıdır. Yinede yoksa kendiniz oluşturun.
- Şu kodu htaccess dosyanızın en sonuna ekleyin:
#maksimimum kayıt sayısını arttırma
php_value max_input_vars 10000
php_value suhosin.get.max_vars 10000
php_value suhosin.post.max_vars 10000
php_value suhosin.request.max_vars 10000
- Htaccess dosyasını kaydedin. Bu kadar.

Wordpress Hata: İstediğiniz işlemi yapabilmek için WordPress web sunucunuza erişmelidir...

Wordpress - Hata:

"İstediğiniz işlemi yapabilmek için WordPress web sunucunuza erişmelidir. Lütfen devam etmek için FTP bilgilerinizi girin. Eğer giriş bilgilerinizi hatırlamıyorsanız, web barındırma firmanızla iletişime geçmelisiniz"

Çözüm:

wp-config.php dosyasını açın ve en alt satıra ekleyin:
define('FS_METHOD', 'direct');

Opencart Ürün Linklerini Kategorisiz Hale Dönüştürme (Product Seo Url Without Category)


Opencart sitenizde kategorilerdin birine girip, herhangi bir ürüne tıkladığınızda Url'ye üründen önce kategori ismi de eklenmektedir. Bu da Google'ın sitenizi yanlış indekslemesine yol açabilir. Çünkü aynı ürüne direk anasayfadan tıklayınca Url'ye kategori eklenmiyor. Bu şekilde bir ürün için iki farklı Url Google tarafından algılanıyor. Url'den kategoriyi çıkartarak bu durumu düzeltmek için:

- catalog/controller/startup/seo_url.php dosyasını açınız.
$url .= '/' . $query->row['keyword']; yazan ilk satırı arayınız ve şu değişikliği yapınız:
  $url = '/' . $query->row['keyword'];
- Diğer satırlarda değişikliğe gerek yok.
- Kaydedip, modifikasyonlardan refresh yapınız. Bu kadar.

Bu düzeltme Opencart 2.3.0.2 versiyonu için denenmiştir. Versiyona göre seo_url.php dosyasının yeri değişebilir.

https://www.opencart.com/index.php?route=marketplace/extension/info&extension_id=32399

SublimeText Kurulum ve PHP Developer Ayarları


Ben bu ayarları ve kurulumu MacOS'da yaptım ama genel olarak diğer sistemlerde de aynı şekilde yapabilirsiniz.
1. SublimeText editörünü kuruyoruz.

2. View-Side Bar-Show Side Bar ve Show Open Files işaretliyoruz.

3. Projemizi açıyoruz (Project-Open Porject). Yoksa Project-Add Folder to Project diyerek htdocs klasörünüzü ekleyebilirsiniz. Daha sonra bu projenizi kaydedersiniz. Böylece dosyalarımız sidebar'a geldi.

4. Sublime user ayarlarımızı yüklüyoruz (daha önceden yedeğiniz varsa) yada yeniden yazıyoruz. Sublime Text-Preferences-Settings açılıdığında yanyana iki pencere gelecektir. Soldaki orjinal ayarlar, sağdaki user yani bizim belirleyeceğimiz ayarlar. Sol kısımdan ayarları kopyalayabiliriz veya internetten sık kullanılan ayarlar paylaşılmıştır bunları user bölümüne açıklamalarıyla ekleyebilirsiniz. Ben kendi ayarlarımı (etkin satırı, tabı renklendirme, satırı bölmeme...vb) şu şekilde belirledim:
{
//aktif satırı reklendir
"highlight_line": true,

//değişiklik yapılmış tabları renklendir
"highlight_modified_tabs": true,

//yatayda sığmayan satırı alta alma
"word_wrap": false,
}

5.  Eklentilerimizi yüklüyoruz. SublimeText 3 son versiyonunda Package Control yüklü geliyor. Eğer yok ise internette nasıl yükleneceğini anlatan videolar var (bir kodu var onu Sublime consol'a yapıştırıp onaylıyorsunuz). Package Control'ü açmak için Tools-Command Palette yada Shift+Command+P kısayolu ile Komut Paletini açıyoruz. install diye arattığınızda Package Control: Install Package seçeneğini seçiyoruz. Böylece Package Control penceresi açılıyor. Buradan Sublime için hazırlanan tüm paketleri bulup kurabilirsiniz. Bir eklentiyi kurmak için listeden seçtiğinizde kurulum başlar, durum çubuğunda insalling yazar ve sonunda genelde bir sekme açılır ve kurulum bitmiş olur. Bazen sublime'yi tekrar başlatmanız gerekebilir.
Kuracağım paketler şunlardır:
Neon Color Scheme packagecontrol:
Color Scheme paketleri kodlarınızın görünüm renklerini değiştirir. Bu tema php için benim seçtiğimdir.
Emmet / packagecontrol:
html:5, img, php, ...vb yazıp tab tuşuna basınca kodu tamamlar. Ayrıca php komutlarını (if, for, switch,...vb) tamamlar.
BracketHighlighter  / packagecontrol:
Parantezleri ve söz dizimi etiketlerini renklendiren bir eklenti. İç içe parantezlerde işinizi kolaylaştırır.
AutoFileName  / packagecontrol:
a href veya img src gibi etiketlerde dosya linkini yazacağımız zaman kutu içinde mevcut dosyalarınızı listeler.
ColorPicker / packagecontrol:
Cmd+Shift+C ile renk seçici açar ve renk kodunu direk yazar.
Color Highlighter / packagecontrol:
Renk kodlarını o renk ile gösterir.
SublimeLinter  / packagecontrol:
Bir kod linting paketidir. Kodlarımızın daha temiz ve hatasız olması için yazılım esnasında bize oldukça yardımcı olur. Hata yaptığımız anlarda satır başlarında kırmızı veya sarı renkli noktalarla bize anlık uyarı verir. Kurmak için öncelikle SublimeLinter paketini kurun. Sonra aynı şekilde SublimeLinter - Php paketini kurun. Diğer dilleri de isterseniz ekleyebilirsiniz.
HTML Nest Comments / packagecontrol:
HTML Nest Comments ile, seçili blok içindeki comment karakterleri regexp ile değiştirilip, karışıklığın önüne geçiyorsunuz.
Alignment  / packagecontrol:
: ve = gibi işaretlere göre kodları hizalar. Özellikle mysql'den veri çekerken çok yararlı olacaktır. 
Mac'de Standart kısayolu sublimeLinter ile çakışmaktadır. Bunun için Sublime Text-Preferences-Package Settings-Alignment-Key Bindings User açın ve şunu ekleyin:
[
{ "keys": ["super+ctrl+a"], "command": "alignment" }
]
FtpSync  / packagecontrol:
Ftp hesabınızı htdocs klasörünüze ekler. Ayarlardan "upload_on_save": true ise dosyanız kaydedildiği anda upload edilir. Yada diğer komutları command palette ile çalıştırabilirsiniz yada kısayol atayabilirsiniz. Sidebar Enhancements eklentisi ile sidebar'da sağ tuşa tıklayarak da işlem yapabiirsiniz. Komutlar için tıklayınız.
SidebarEnhancements  / packagecontrol:
Kısaca olmazsa olmaz. Sidebarınızı işlevsel hale getiriyor. Çoğu işlemi sağ tuş menüsü ile yapmanıza olanak veriyor.
StyleToken  / packagecontrol:
Örneğin bir div etiketini seçip sağ tuş ile ilgili menüsünden Style1,2,3 gibi seçerek dosyadaki tüm div etiketlerinin bu renkte görünmesini sağlayabilirsiniz.
SublimeCodeIntel  / packagecontrol:
SublimeCodeIntel, yazılım dillerinin SDK yollarını belirttiğiniz takdirde, bütün alt sınıflarını ve argümanlarını size otomatik tamamlama içinde sunabiliyor. Eklentinin JavaScript, SCSS, Python, HTML, Ruby, Python3, XML, Sass, HTML5, Perl, CSS, Twig, Less, Node.js, TemplateToolkit ve PHP dilleri indexleyebilmesi aktif seçenek olarak geliyor. Olmazsa olmazlardan.
SwapStrings  / packagecontrol:
Bir ifadeyi diğer bir ifade ile karşılıklı değiştirir. "<>' yazdığınızda tüm " ları ' tırnak ve tüm ' ları " yapar. elma<>armut yazınca da aynı şekilde elma ve armutları yer değiştirir. Yalnız işlem yapılacak alanı seçmeniz gereklidir. Kısayolu ^ + Alt + Cmd + S dir.
Terminal  / packagecontrol:
Kurduktan sonra Cmd + ^ + T kısayolu ile terminal penceresini açabilirsiniz. Terminal ile birçok işlemi başka bir programa gerek kalmadan yapabilirsiniz.
DocBlockr  / packagecontrol:
Bu eklenti sayesinde daha kolay açıklama satırları oluşturabilirsiniz. /** yazıp tab tuşuna basmanız yeterli, bu işlemi fonksiyonların öncesinde yaparsanız parametreleri de otomatik olarak açıklama satırına eklemektedir. Son olarak // Tanımlar yazıp Ctrl+ Enter yapınız ve dekoratif bir tarz elde ediniz (bu işlemi mac'de yapamadım).

6. Geldik son olarak bu kadar uğraşarak kurduğumuz packages'leri yedekleme işlemine. Bu işlem Sublime'yi sıfırdan kurduğumuzda yeniden tek tek bu packages'leri kurmadan kolayca tek seferde geri yüklememizi sağlar. Öncelikle PackageSync / packagecontrol paketini kuruyoruz. Sonra menüden Tools - PackageSync - Backup/Restore - Backup packages to zip (recommended) seçiyoruz. zip yedeğinin kaydedileceği yeri soruyor yazıp Enter'a basıyoruz. İşte bu kadar. Geri yüklerken de Restore ile kolayca paketlerimizi yüklüyoruz.

Opencart - Hata Mesajları ve Çözümleri

Missing argument 2 for Template::render() called in /public_html/system/storage/modification/system/engine/loader.php on line 87

Hata Nedeni: 
Yeni tema yükleme. TR dilini yükledikten sonra bir tema eklediğinizde çıkıyor.

Çözümü:
Admin/Eklentiler/Modifikasyonlar/Refresh(Yenile) butonuna bir yada birkaç kez tıklayın.

Php _GET & _POST & Url & Int & Değişken & SQL Güvenliği

Php'de kodlama yaparken $_GET gibi değişkenlerden gelen zararlı karakterleri filtrelemek için bu yöntemleri öneririm:


A) $_GET & $_POST & Url & Int & DEĞİŞKEN GÜVENLİĞİ

1. İlk olarak gelen değişkendeki html karekterlerini zararsız hale getirelim (< yerine < gibi)
$user_name= htmlspecialchars($_GET['user_name']);
    Veya
$name= filter_input(INPUT_GET, 'name', FILTER_SANITIZE_SPECIAL_CHARS);

       Ben htmlspecialchars kullanıyorum. Farkı yok. Fakat filter_input en az PHP 5.2.0 gerektirir.  Eğer html kodlarından tamamen kurtulmak isterseniz  $user_name=strip_tags($user_name)

2. Eğer aldığınız değer integer (sayısal) ise gerçekten sayısal mı diye kontrol edelim
$user_id =intval($_GET['user_id']);
Veya
$user_id = filter_input(INPUT_GET, 'user_id', FILTER_SANITIZE_NUMBER_INT);
     Ben intval kullanıyorum. Farkı yok. Fakat filter_input en az PHP 5.2.0 gerektirir.
   
     Eğer sayısal bir değer gelmezse NULL değeri döner. 'sddd3' gibi bir değer için 3 döner. Eğer gelen sayısal değeri - ve + işaretlerinden arındırmak istiyorsanız:  $user_id = abs($user_id); 

3. Eğer aldığınız değer url içeriyorsa güvenlik için şu şekilde kullanalım (Bu sefer POST yöntemi için örnek verelim)
$url = urlencode($_POST['url']);
Veya
$url = filter_input(INPUT_POST, 'url', FILTER_SANITIZE_ENCODED);
    Ben urlencode kullanıyorum. Farkı yok. Fakat filter_input en az PHP 5.2.0 gerektirir. Eğer encode edilmiş url'yi decode etmek isterseniz:  $url=urldecode($url);


B) SQL GÜVENLİĞİ

1. Eğer SQL sorgu cümlesi içerisine ' gibi özel karakterler girip sorun çıkarmasını istemiyorsanız sorgunuzu çalıştırmadan önce sql cümlenizi filtrelemeniz gereklidir.
// PDO
$safe = $db->escape_string($name); // OOP Style

// MySQLi
$safe = mysqli_real_escape_string($db, $name); // mysqli

// mysql_*
$safe = mysql_real_escape_string($name, $db);

// Genel Kullanım (Son Çare Olarak Kullanılabilir)
$safe = addslashes($name);

En Faydalı Notepad++ Eklentileri (Php, Html, Javascript, ...)


Kullandığım ve tavsiye ettiğim Notepad++ eklentileri (plugins):

HTML Tag: html etiketlerinin başını ve sonunu yakalar.
JSTool: Javascript kodlarındaki hataları yakalar.
Compare: İki dosya arasındaki farkları bulur.
NppFTP: Ftp mantığı ile hostinginizde bulunan dosyalara ulaşırsınız. Ayrıca bu dosyaları direk server üzerinden düzenleyebilirsiniz.
PHP Autocompletion: Php komutları hakkında size yardımcı olur. Örneğin unset yazıp ( açtığınızda bir kutu içinde size kodun bölümlerini gösterir.
Quick Color Picker + : Kod içindeki renkleri seçili hale getirdiğinizde yada renk eklemek istediğinizde size renk paletini açar ve renk kodunu yazmadan direk seçebilirsiniz.

Bu eklentileri yüklemek için Notepad++ > Eklentiler > Pulgin Manager > Show Plugin Manager yolunu takip edin. Bütün eklentiler listelenecektir. Listeden istediğinizi seçip kurabilirsiniz.

phpMyAdmin Alanların Altındaki Kesik Çizginin Anlamı Nedir?

Görüldüğü gibi phpMyAdmin kullanıyorsanız bazı alanların altında kesik çizgi olduğunu görebilirsiniz. Bunun anlamı bu alana bir açıklama (comments) girilmesidir. Bu sayede yeni bir satır veri girişi yaparken bu kesik çizginin üzerine fareyi getirdiğimizde açıklama görünür.

Mysql'de Tabloları İlişkilendirirken (Foreign Key) Cascade ve Restrict Farkı Nedir?


Biliyorsunuz Mysql'de tablolar arasında ilişki kurabiliyorsunuz. Bu ilişkilendirmeyi PhpMyAdmin benzeri bir arayüzden yada direk SQL kodu ile veritabanını oluştururken yapabilirsiniz. Mysql'de ilişkilendirmenin nasıl yapılacağı hakkında çok bilgi vardır. Burada buna değinmeyeceğim. Benim bahsetmek istediğim bu ilişkilendirmeyi yaparken Cascade yada Restrict hangisini seçmemiz gerektiğidir?

Cascade (kademeli): Eğer ilişkili ana satır (parent row) silinirse yada güncellenirse bağlı olduğu alt satır (child row) da silinir yada güncellenir.

Restrict (sınırlama): Fakat Restrict kullanırsanız o zaman ana satır (parent row) silinirse yada güncellenirse bağlı olduğu alt satır (child row) silinmez yada güncellenmez. Bir hata mesajı (error) verir. Örneğin "Silmeye çalıştığınız satırdaki .... alanı başka bir tabloda kullanılıyor". Bu hata işlemini parent row silerseniz çıkar. Bağlı olduğu child row'u silseniz bir hata almazsınız ki olması gereken de budur.

Set Null (Boş): Parent row silinirse yada güncellenirse child row'a Boş (Null) değeri atanır.

No Action (Hiçbirşey yapma): Hiç bir işlem yapmaz. Yani parent row silinse de güncellense de child row da bir işlem yapılmaz.