MYSQL Sayısal(int) Değerlerin Farkları


Tinyint, Smallint, Mediumint, Int, Bigint alanları arasındaki farklar:


          | Byte     Range(signed)                                Range (unsigned)
--------------------------------------------------------------------------------------------
tinyint   | 1 byte   -128 to 127                                  0 to 255
smallint  | 2 bytes  -32768 to 32767                              0 to 65535
mediumint | 3 bytes  -8388608 to 8388607                          0 to 16777215
int       | 4 bytes  -2147483648 to 2147483647                    0 to 4294967295
bigint    | 8 bytes  -9223372036854775808 to 9223372036854775807  0 to 18446744073709551615

Opencart Para Birimleri Mevzuları


T.C. MERKEZ BANKASINDAN KURLARI ALMA

erdalatabalkan Doviz Kurlari Guncellemesi eklentisi bu iş için bence en iyisi. Çünkü opencart standart özellikleri üzerinden çalışıyor ve hiçbir dosyayı upload etmek gerekmiyor. Döviz kurlarını TCMB efektif satış değeri üzerinden alıp günceller. Ben efektif satış değerini kullanıyorum çünkü en yüksek değer bu fakat kodlarda ufak değişiklik ile bunu değiştirebilirsiniz.


PARA BİRİMLERİNİ GÜNCELLEME

MANUEL YÖNTEM:
Eğer güncelleme işlemini manuel yapmak isterseniz Admin > Ayarlar > Yerelleştirme > Para Birimleri > Yenile (turuncu buton) tıklayın.

OTOMATİK YÖNTEMLER:
1) Admin > Ayarlar > Seçenekler > Yerel > Para Birimini Otomatik Güncelle > Evet seçerek opencart standart güncellemesini açabilirsiniz. Daha sonra Opencart Admin Panelin anasayfasına (diğer sayfayarda olmuyor) her girdiğinizde para birimleri otomatik güncellenecektir. Otomatik para birimi güncellemesi açık olsa dahi, Admin Panel anasayfasına girmezseniz güncelleme gerçekleşmeyecektir!!!

2) İlk maddede belirttiğim üzere Admin Panel anasayfasında gerçekleşen güncelleme komutlarını, yine Admin panelde daha sık girdiğiniz Siparişler sayfasına ekleyebilirsiniz. Bu kodu dashboard.php controller dosyası içinde bulabilirsiniz. Kopyalayıp siparişler sayfası controller dosyasındaki index metodu içine ekleyiniz. Bu işi yapan vqmod komutları aşağıdaki gibidir:
<file path="admin/controller/sale/order.php">
<operation>
  <search><![CDATA[public function index() {]]></search>
  <add position="after"><![CDATA[
  // Run currency update
  if ($this->config->get('config_currency_auto')) {
    $this->load->model('localisation/currency');

    $this->model_localisation_currency->refresh();
  }
  ]]></add>
</operation>
</file>
3) Yukarıda verdiğim kodlar ile bir admin/controller dosyası oluşturun. Ardından bu dosyanın url'si ile CPanel'den bir cron job oluşturun. Böylece otomatik güncellemeyi sağlamış olursunuz. Bu mantıkla hazırlanmış GrandCMS gibi eklentileri Opencart marketinden indirip kullanabilirsiniz. Ben test etmediğim için burada işin mantığını anlatmaya çalıştım.

Bu üç yöntemden birini veya hepsini birden aynı anda kullanabilirsiniz.

 

ÇOKLU PARA BİRİMİ İLE ÇALIŞMA

Opencart mağazanızda birden fazla para birimi ile çalışmanız mümkün. Bu işlem mağazanızın üst menüsünde bulunan para birimlerinden birini seçmek kadar kolay. Dolar, Euro, TL, ... ne seçerseniz o mağazaki bütün fiyatlar bu para biriminden gösterilmeye başlayacaktır. 

Taki ödeme aşamasına gelene kadar hiçbir sorun olmayacaktır. Eğer ödeme aşamasında mağazanın varsayılan para birimi ne ise o birimden işlemin gerçekleşmesini isterseniz bu sorun olacaktır. Kredi kartı modülünüzden veya herhangi bir sebepten dolayı, örneğin fiyatlar Euro olarak gösterilse dahi, son aşamada TL olarak ödensin isteyebilirsiniz.

İşte Opencart standart olarak bunu sağlamıyor malesef! Bu durumda çoklu para birimi eklentileri devreye giriyor. Çoklu para birimi kullanımından kastettiğim de budur. Çözüm için opencart eklenti mağazasında farklı eklentiler bulmanız ve sisteminize göre entegre etmeniz mümkün. Burada kendi hazırladığım Çoklu Para Birimi eklentisini paylaşamıyorum fakat benimle iletişime geçerek talep edebilirsiniz.


SSS

1) Opencart para birimlerini otomatik güncelleme özelliği nereden aktif hale getirilir?
Admin > Ayarlar > Seçenekler > Yerel > Para Birimini Otomatik Güncelle > Evet seçerek güncellemeyi aktif hale getirirsiniz.

2) Opencart otomatik olarak para birimlerini hangi aralıkta / ne zaman günceller?
Admin Panel anasayfasına her girdiğinizde günceller. Admin panelin diğer sayfalarında güncelleme olmaz sadece anasayfasında olur. Tabiki 1. maddede belirttiğim gibi otomatik güncelleme özelliğinin açık olması gereklidir.



Bu yazıda paylaştığım eklentileri hazırlayan arkadaşlara teşekkür ederim.
Son Güncelleme: 4/6/2020

Opencart Samesite Hatası ve Çözümü


Samesite Hatası:
Yeni Chrome güncellemesi ile yaşanan Samesite hatası opencart için de sıkıntı oluşturmaktadır. Özellikle ödeme aşamasında 3D güvenlik sms'i için banka sayfasına gidip geri döndüğünüzde oturumunuzun sonlanması durumu ciddi sıkıntılara yol açmaktadır. Ödeme alınsa dahi sipariş oluşmamaktadır. Samesite hatası hakkında ayrıntılı bilgi için: https://dev.iyzipay.com/tr/sss/samesite-problemi-nedir


Çözüm:
Öncelikle kullandığınız php sürümünün 7.3 veya üstü olduğuna emin olunuz. Bu çözüm için en az 7.3 sürümü gereklidir fakat daha düşük bir sürüm kullanıyorsanız verdiğim kaynaklara bakarak kodları değiştirebilirsiniz, ben test edemediğim için eklemedim. Yine bu çözümü opencart 2.3 versiyonu üzerinde denediğimi ve sorunsuz çalıştığını belirtmeliyim. Eksik gördüğünüz bir kısım olursa yorum yazmanızı rica ederim. Ayrıntısını aşağıda vereceğim fakat genel olarak session_start() ve setcookie() komutları öncesine 'samesite' => 'None' ve secure parametrelerini ekleyerek çözdüm.
Not: Bu çözümü opencart için yazdım fakat kendi yazılımınız için de uygulayabilirsiniz. Bulup değiştireceğiniz komutlar yine bu iki komuttur.

Düzenlediğim opencart dosyaları ve değişiklikler:

1. system/library/session.php

Bul:
session_set_cookie_params(0, '/');
session_start();
Değiştir:
if (PHP_VERSION_ID < 70300) {
    session_set_cookie_params(0, '/; samesite=None', '.yoursite.com', true, true);
} else {
    ini_set('session.cookie_samesite', 'None');
    session_set_cookie_params([
        'lifetime' => 0,
        'path' => '/',
        'domain' => '.yoursite.com',
        'secure' => true,
        'httponly' => true,
        'samesite' => 'None'
    ]);
}
session_start();

Bul:
setcookie($key, $this->session_id, ini_get('session.cookie_lifetime'), ini_get('session.cookie_path'), ini_get('session.cookie_domain'), ini_get('session.cookie_secure'), ini_get('session.cookie_httponly'));Değiştir:
if (PHP_VERSION_ID < 70300) {
    setcookie($key, $this->session_id, ini_get('session.cookie_lifetime'), ini_get('session.cookie_path'), ini_get('session.cookie_domain'), ini_get('session.cookie_secure'), ini_get('session.cookie_httponly'));
} else {
    $samsite_cookie_options = array (
        'expires' => ini_get('session.cookie_lifetime'),
        'path' => ini_get('session.cookie_path'),
        'domain' => ini_get('session.cookie_domain'),
        'secure' => true, // or false
        'httponly' => true, // or false
        'samesite' => 'None' // None || Lax || Strict
    );
    setcookie($key, $this->session_id, $samsite_cookie_options);
}

Bul:
setcookie($key, '', time() - 42000, ini_get('session.cookie_path'), ini_get('session.cookie_domain'));
Değiştir:
if (PHP_VERSION_ID < 70300) {
    setcookie($key, '', time() - 42000, ini_get('session.cookie_path'), ini_get('session.cookie_domain'));
} else {
    $samsite_cookie_options = array (
        'expires' => time() - 42000,
        'path' => ini_get('session.cookie_path'),
        'domain' => ini_get('session.cookie_domain'),
        'secure' => true, // or false
        'httponly' => true, // or false
        'samesite' => 'None' // None || Lax || Strict
    );
    setcookie($key, '', $samsite_cookie_options);
}

2. catalog/controller/startup/startup.php

Bul:
setcookie('language', $code, time() + 60 * 60 * 24 * 30, '/', $this->request->server['HTTP_HOST']);
Değiştir:
if (PHP_VERSION_ID < 70300) {
    setcookie('language', $code, time() + 60 * 60 * 24 * 30, '/', $this->request->server['HTTP_HOST']);
} else {
    $samsite_cookie_options = array (
        'expires' => time() + 60 * 60 * 24 * 30,
        'path' => '/',
        'domain' => $this->request->server['HTTP_HOST'],
        'secure' => true, // or false
        'httponly' => true, // or false
        'samesite' => 'None' // None || Lax || Strict
    );
    setcookie('language', $code, $samsite_cookie_options);
}

Bul:
setcookie('tracking', $this->request->get['tracking'], time() + 3600 * 24 * 1000, '/');
Değiştir:
if (PHP_VERSION_ID < 70300) {
    setcookie('tracking', $this->request->get['tracking'], time() + 3600 * 24 * 1000, '/');
} else {
    $samsite_cookie_options = array (
        'expires' => time() + 3600 * 24 * 1000,
        'path' => '/',
        'domain' => $this->request->server['HTTP_HOST'],
        'secure' => true, // or false
        'httponly' => true, // or false
        'samesite' => 'None' // None || Lax || Strict
    );
    setcookie('tracking', $this->request->get['tracking'], $samsite_cookie_options);
}

Bul:
setcookie('currency', $code, time() + 60 * 60 * 24 * 30, '/', $this->request->server['HTTP_HOST']);
Değiştir:
if (PHP_VERSION_ID < 70300) {
    setcookie('currency', $code, time() + 60 * 60 * 24 * 30, '/', $this->request->server['HTTP_HOST']);
} else {
    $samsite_cookie_options = array (
        'expires' => time() + 60 * 60 * 24 * 30,
        'path' => '/',
        'domain' => $this->request->server['HTTP_HOST'],
        'secure' => true, // or false
        'httponly' => true, // or false
        'samesite' => 'None' // None || Lax || Strict
    );
    setcookie('currency', $code, $samsite_cookie_options);
}

3. Bütün dosyalarınızı aratarak session_start() ve setcookie() komutlarını yukarıdaki gibi değiştiriniz. Aslında ilk 2 dosya üzerindeki değişiklikler yeterli olmaktadır ama yine de bir süprizle karşılaşmamak için diğer dosyalarınızı da taramanızı öneririm.


...


Gelen sorular üzerine ekliyorum. Opencart 2.1.0.1 için aşağıdaki ekran görüntülerindeki 3 dosyayı düzenlemeniz gerekmektedir. session_start ve setcookie komutlarını arayarak kendiniz de bulabilirsiniz. Bu satırları bulup yukarıdaki örneklerdeki gibi değiştiriniz.





Opencart Sık Kullanılan MYSQL Sorguları

Mağazanızdaki ürünlerin bilgilerinde toplu olarak bir değişiklik yapmanız gerektiğinde mysql database üzerinde çalıştıracağınız örnek update sorguları aşağıdadır.

Ürün Adında Toplu Güncelleme Yapma:
UPDATE oc_product_description SET name = REPLACE(name, 'Sarı Defter', 'Yeşil Defter') WHERE INSTR(name, 'Sarı Defter') > 0
Böylece tüm ürün adında "Sarı Defter" geçenler "Yeşil Defter" olarak güncellenir. Örneğin "Kareli Sarı Defter" --> "Kareli Yeşil Defter" haline gelir.


Ürün Açıklamasında Toplu Güncelleme Yapma:
UPDATE oc_product_description SET description = REPLACE(description, 'Bağımsız tabakalar halindedir', 'Bağımsız yapraklar halindedir') WHERE INSTR(description, 'Bağımsız tabakalar halindedir') > 0
Böylece text içindeki bir kelime veya cümleyi değiştirebilirsiniz.


Ürün Açıklamasında Toplu Güncelleme Yapma (Ürün Adına Göre Arayarak):
UPDATE oc_product_description SET description = REPLACE(description, '%100 pamuklu tuval bezi, köknar ağacından üretilir', '%90 pamuklu tuval bezi, çınar ağacından üretilir') WHERE INSTR(name, 'Basic Seri Tuval') > 0


Birden Fazla Ürünün Durumunu Tek Seferde Güncelleme:
Product ID'leri belli olan birden fazla ürünün durumunu tek seferde güncellemek için:
UPDATE oc_product SET status = 0 WHERE product_id IN (1563,1564,1566,1607,1617,1620)


Ürün seçenek tablosunda çift girilmiş verileri bulma:
Hatalı olarak iki kere girilen verileri bulmak için:
SELECT name, COUNT(*) c FROM oc_option_value_description WHERE language_id=2 GROUP BY name HAVING c > 1


Ürün fiyatlarını toplu güncelleme:
Örneğin ürün kodunda digital geçmeyenlerin fiyatını %15 arttırmak için:
UPDATE oc_product SET price = (price * 1.15) WHERE model NOT LIKE '%digital%'



Son Güncelleme: 8/12/2021

Regex

Favori Regex Kodlarım

TC Kimlik No:

/([1-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])/
Daha kısa ve son hanenin çift olmasını kontrol eden hali:
^[1-9]{1}[0-9]{9}[02468]{1}$


Javascript Turkish Title Case

Kelimelerin İlk Harflerini Türkçe Uyumlu Büyük Harf Yapma

Eğer Javascript veya Jquery kullanarak kelimelerin ilk harflerini büyük harfe çevirmek ve bunu Türkçe harfler için de sorunsuz çalıştırmak istiyorsanız aşağıdaki fonksiyonu kullanabilirsiniz.

Turkish TitleCase:
/**
 * Kelimelerin sadece ilk harfini buyuk hale cevirip yollar (Title Case)
 * Turkce karakterleri dogru cevirir.
 * . , ; ! : - ? ve bosluk karakterlerini kelime ayirici olarak sayar. 
 */
function toTitleCaseTR(str) {
    return str.toLocaleLowerCase('tr-TR').replace(/(?:^|\s|,|;|!|:|-|\.|\?)[a-z0-9ğçşüöı]/g, function(match) {
        return match.toLocaleUpperCase('tr-TR');
    });
}

Eğer metnin hepsini büyük veya küçük yapacaksanız aşağıdaki şekilde kullanabilirsiniz.

Turkish UpperCase:
str.toLocaleUpperCase('tr-TR');

Turkish LowerCase:
str.toLocaleLowerCase('tr-TR');

Change A Href All Colors with CSS


Change A Href All Colors with CSS

a, a:link, a:visited, a:hover, a:active {
  color: #fff;
}


Vertical Align Center


Yatay/Dikey Ortala

<div style="position: relative;">
  <button class="center">PHP</button>
</div>

.center {
  position: absolute;
  top: 50%;
  left: 50%;
  -webkit-transform: translate(-50%, -50%);
  -ms-transform: translate(-50%, -50%);
  transform: translate(-50%, -50%);
}

Sadece Dikey Ortala

<div style="position: relative;">
  <button class="center">PHP</button>
</div>

.center {
  position: absolute;
  top: 50%;
  -webkit-transform: translateY(-50%);
  -ms-transform: translateY(-50%);
  transform: translateY(-50%);
}

Sadece Yatay Ortala

<div style="position: relative;">
  <button class="center">PHP</button>
</div>

.center {
  position: absolute;
  left: 50%;
  -webkit-transform: translateX(-50%);
  -ms-transform: translateX(-50%);
  transform: translateX(-50%);
}

Div İçinde Span Ortala

<div class="container">
  <button class="center">PHP</button>
</div>

.container {
  height: 25px;
  line-height: 25px;
  text-align: center;
}
.center {
  width: 12px;
  height: 12px;
  display: inline-block;
  vertical-align: middle;
  line-height: normal;
}


Javascript Reload Page


Best way for reload the page with javascript:

window.location.reload(false);

True:  load from server.
False: load from cache.

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 */

Paylaşım Linkleri Oluşturma (Share Links)

Create Share Links

Twitter
http://twitter.com/share?text=TITLE&url=URL

Facebook
http://www.facebook.com/sharer.php?u=URL

Pinterest
http://pinterest.com/pin/create/button/?url=URL&description=TITLE

LinkedIn
https://www.linkedin.com/shareArticle?mini=true&url=URL&title=TITLE

Kaynak

Numaralarına Göre Kredi Kartı Tipleri (Types of Credit Cards)

Types of Credit Cards

Issuing network
IIN ranges
Active
Length
Validation
American Express34, 37[5]Yes15[6]Luhn algorithm
Bankcard[7]5610, 560221–560225No16
China T-Union31[8][9]Yes19
China UnionPay62[10], 81Yes16–19[11]
Diners Club enRoute2014, 2149No15no validation
Diners Club International[12]36Yes14–19[11]Luhn algorithm
300–305, 3095, 38–39Yes16–19[11]
Diners Club United States & Canada[13]54, 55 (MasterCard co-branded)Yes16
Discover Card6011, 622126 - 622925, 624000 - 626999, 628200 - 628899,[14] 64, 65Yes16–19[11]
RuPay60, 6521, 6522Yes16
InterPayment636Yes16–19
InstaPayment637-639Yes16
JCB3528–3589Yes16–19[11]
Laser6304, 6706, 6771, 6709No16–19
Maestro UK6759, 676770, 676774[15]Yes12–19
Maestro50, 56–69[15]Yes12–19
Dankort5019Yes16
4571 (Visa co-branded)[16]Yes16
MIR2200–2204Yes16
NPS Pridnestrovie6054740-6054744Yes16
Mastercard2221-2720[17]Yes 2017[18]16
51–55Yes16
Solo6334, 6767No16, 18, 19
Switch4903, 4905, 4911, 4936, 564182, 633110, 6333, 6759No16, 18, 19
Troy979200–979289Yes16
Visa4 (including related/partner brands: Dankort, Electron, etc.)Yes16
UATP1Yes15
Verve506099–506198, 650002–650027Yes16, 19
LankaPay357111Yes16

American Express

Valid length: 15 digits. First digit must be a 3 and second digit must be a 4 or 7. 

Diners Club and Carte Blanche

Valid length: 14 digits. 
First digit must be 3 and second digit must be 0, 6, 8 or 9. The ranges are:
300000 through 305999
309500 through 309599
360000 through 369999
380000 through 399999

Discover

Valid length: 16 digits.
First 6 digits must be in one of the following ranges:
601100 through 601109
601120 through 601149
601174
601177 through 601179
601186 through 601199
644000 through 659999

enRoute

Valid length: 15 digits. First four digits must be 2014 or 2149.

JCB

Valid length: 16 to 19 digits.
First 4 digits must be in the range 3528 through 3589. 

MasterCard

Valid length: 16 digits.
First digit must be 5 and second digit must be in the range 1 through 5 inclusive. The range is 510000 through 559999.
First digit must be 2 and second digit must be in the range 2 through 7 inclusive. The range is 222100 through 272099.

Maestro

Valid length: Up to 19 digits.
First digit must be 5 or 6. The ranges are:
50nnnn
56nnnn through 64nnnn
66nnnn through 69nnnn
Note: The range 60nnnn to 64nnnn is also used by Discover (see above). 

Visa

Valid length: Up to 19 digits. First digit must be a 4. 


Test Card Numbers
Types
5890040000000016      
Master Card (Debit)
5526080000000006
Master Card (Credit)
4766620000000001
Visa (Debit)
4603450000000000
Visa (Credit)
4987490000000002
Visa (Debit)
5311570000000005
Master Card (Credit)
9792020000000001
Troy (Debit)
9792030000000000
Troy (Credit)
5170410000000004
Master Card (Debit)
5400360000000003
Master Card (Credit)
374427000000003
American Express
4475050000000003
Visa (Debit)
5528790000000008
Master Card (Credit)
4059030000000009
Visa (Debit)
5504720000000003
Master Card (Credit)
5892830000000000
Master Card (Debit)
4543590000000006
Visa (Credit)
4910050000000006
Visa (Debit)
4157920000000002
Visa (Credit)
5168880000000002
Master Card (Debit)
5451030000000000
Master Card (Credit)

Source 1Source 2Source 3

VueJs Remove Spaces From Input Value


VueJs Remove Spaces From Input Value

Delete all spaces from input value:

<input type="text" name="card_number" v-model="foo">
<input type="hidden" name="bar" :value="foo.replace(/\s/g, '')">

VueJs Input Uppercase


VueJs Input Uppercase

VueJs Model method:
<input type="text" v-model="name" @input="name=name.toUpperCase()">

Pure JS method:
<input type="text" v-model="name" onkeyup="this.value=this.value.toUpperCase();">

VueJs Model method (with Turkish language function):
<input type="text" v-model="name" @input="name=name.turkishToUpper()">

<script>
/*TR UpperCase()*/
String.prototype.turkishToUpper = function(){
  var string = this;
  var letters = { "i": "İ", "ş": "Ş", "ğ": "Ğ", "ü": "Ü", "ö": "Ö", "ç": "Ç", "ı": "I" };
  string = string.replace(/(([iışğüçö]))/g, function(letter){ return letters[letter]; })
  return string.toUpperCase();
}
/*TR UpperCase*/
<script>