# OpenCart

## Model View Controller Yapısı <a href="#model-view-controller-yapisi" id="model-view-controller-yapisi"></a>

> MVC hakkında bilgi sahibi olmak istersen [buraya](https://github.com/yedhrab/YWiki/tree/169abadfd1b8862c004399268f6ca1f9f9359d61/1%20-%20Programlama%20Notlar%C4%B1/5%20-%20Web%20Programlama/Proje%20Y%C3%B6netimi%20Notlar%C4%B1/Proje%20Y%C3%B6netimi/README.md#Model%20View%20Controller%20Yap%C4%B1s%C4%B1) tıklayabilirsin.

* Lazım ise veri tabanında `[name]` adı verilen sütun oluşturulur.
  * MySQL sorgu örneği için [buraya](https://github.com/yemreak/blog/blob/main/docs/tr/arsiv/web/broken-reference/README.md) tıklayın.

> `[Name]` bir değişken ismidir. *Örn: product\_info*

* **Model** dizinindeki gerekli veri tabanı metodlarını güncelleme
  * `add*`, `edit*` metodlarındaki mySQL sorguları (*Insert, Update*) güncellenir
  * Dosya ve dizin yolları:
    * *...\webadmin\model*
    * *...\model*
    * *...\webadmin\model* *`dizin`* *`dosya adı`.php*
* **Controller** dizinindeki uygun dosyadan model yüklenir.
  * Model yüklenir. Kod örneği için [buraya](https://github.com/yemreak/blog/blob/main/docs/tr/arsiv/web/broken-reference/README.md) tıklayabilirsin.
  * Veri modelden alınır. Kod örneği için [buraya](https://github.com/yemreak/blog/blob/main/docs/tr/arsiv/web/broken-reference/README.md) tıklayabilirsin.
  * View'a veriyi gönderme: Kod örneği için [buraya](https://github.com/yemreak/blog/blob/main/docs/tr/arsiv/web/broken-reference/README.md) tıklayabilirsin.
  * Dosya ve dizin yolları:
    * *...\webadmin\controller*
    * *...\controller*
    * *...\webadmin\controller* *`dizin`* *`dosya adı`.php*

      > `$data` değikeni içindeki veriler *view*'a iletilir.
* **View** dizinindeki TPL uzantılı dosya üzerinde görsel düzenleme yapılır.
  * Dosya ve dizin yolları:
    * *...\webadmin\view*
    * *...\view*
    * *...\webadmin\view* *`dizin`* *`dosya adı`.tpl*

### Modeli yükleme <a href="#modeli-yuekleme" id="modeli-yuekleme"></a>

```
$this->load->model('catalog/manufacturer');
```

### Veriyi modelden alma <a href="#veriyi-modelden-alma" id="veriyi-modelden-alma"></a>

```
$[veri adı] = $this->[model]->[get metodu]();
```

### Veriyi view'a gönderme <a href="#veriyi-viewa-goenderme" id="veriyi-viewa-goenderme"></a>

## CSS dosyaları <a href="#css-dosyalari" id="css-dosyalari"></a>

* Örnek dizin: `...\catalog\view\asset\style\`
* Tam dizin: `C:\xampp\htdocs\ecommerce2\catalog\view\asset\style\custom.scss`

## Ana sayfaya satır ekleme <a href="#ana-sayfaya-satir-ekleme" id="ana-sayfaya-satir-ekleme"></a>

* Lazım ise veri tabanında `[name]` adı verilen sütun oluşturulur.
  * MySQL sorgu örneği için [buraya](https://github.com/yemreak/blog/blob/main/docs/tr/arsiv/web/broken-reference/README.md) tıklayın.
* View için değişken oluşturma. Kaynak kod örneği için [buraya](https://github.com/yemreak/blog/blob/main/docs/tr/arsiv/web/broken-reference/README.md) tıklayabilirsin.
  * View kısmında `$[veri ismi]` olarak kullanabilirsin.

## Form / List Ekleme <a href="#form-list-ekleme" id="form-list-ekleme"></a>

* Veri tabanında `[name]` adı verilen sütun oluşturulur.

  * MySQL sorgu örneği için [buraya](https://github.com/yemreak/blog/blob/main/docs/tr/arsiv/web/broken-reference/README.md) tıklayın.

  > `[Name]` bir değişken ismidir. *Örn: product\_info*
* **Model** dizinindeki gerekli veri tabanı metodlarını güncelleme

  > MySQL üzerindeki verileri sorgular yardımıyla projeye ekleyen yapıdır.
  >
  > * `add*`, `edit*` metodlarındaki mySQL sorguları (*Insert, Update*) güncellenir
  > * *Örnek Yol: webadmin\model*
  > * *Örn: C:\xampp\htdocs\ecommerce2\webadmin\model\sale\special\_promotions.php*
* **Controller** dizinindeki Uygun dosyanın `getForm` / `getList` metodunda entry değişkenlerini ve verileri oluşturma

  > Veriler $data değişkeni ile *.tpl* uzantılı dosyaya aktarılır.
  >
  > * Entry eklenir. Kaynak kodu için [buraya](https://github.com/yemreak/blog/blob/main/docs/tr/arsiv/web/broken-reference/README.md) tıklayabilirsin.
  > * Veri oluşturma. Kaynak kod için [buraya](https://github.com/yemreak/blog/blob/main/docs/tr/arsiv/web/broken-reference/README.md) tıklayabilirsin.
  > * *Örnek Yol: webadmin\controller*
  > * *Örn: C:\xampp\htdocs\ecommerce2\webadmin\controller\sale\special\_promotions.php*
* **Languages** dizinindeki PHP uzantılı dil dosyası üzerinde değişken oluşturulur.

  > Dillere özgü metinler oluşturmak adına kullanılır.
  >
  > * *Örnek Yol: webadmin\language\turkish*
  > * *Örn: ecommerce2\webadmin\language\turkish\sale\special\_promotions.php*
* **View template** dizinindeki *.tpl* uzantılı dosya üzerinde görsel düzenleme yapılır.

  > Front-end kısmıdır.
  >
  > * `tr` satırı kopyalanıp, `name` değerleri `entry_[name]` yapısı ile alınır
  > * *Örn: ecommerce2\webadmin\view\template\sale\special\_promotions\_form.tpl*

### Form için entry ekleme <a href="#form-icin-entry-ekleme" id="form-icin-entry-ekleme"></a>

```
$this->data['entry_[name]'] = $this->language->get('entry_[name]');
```

### Form verisi oluşturma <a href="#form-verisi-olusturma" id="form-verisi-olusturma"></a>

```
if (isset($this->request->post['[name]'])) {    $this->data['[name]'] = $this->request->post['[name]'];} elseif (!empty($special_promotion)) {    $this->data['[name]'] = $[değişken]['[name]'];} else {    $this->data['[name]'] = 0; }
```

* `[değişken]` Model ile alınan mySQL verilerini tutan değişken

  > Tablo değişkeni için `$special_promotion` veya `$order_info` örnek olabilir.
* `[name]` MySQL sütun ismi

  > Sütun ismi için `$product_info` örnek olabilir.

> Veri oluşturulmazsa `TLP` (front-end) kısmında görmez.

## Filtreleme <a href="#filtreleme" id="filtreleme"></a>

```
$results = $this->model_sale_order->getOrders($data);
```

* **Model** dizinindeki gerekli veri tabanı metodlarını güncelleme

  > MySQL üzerindeki verileri sorgular yardımıyla projeye ekleyen yapıdır.
  >
  > * `get*s`, `getTotal*s` metodlarındaki mySQL sorguları güncellenir. Kaynak kodu için [buraya](https://github.com/yemreak/blog/blob/main/docs/tr/arsiv/web/broken-reference/README.md) tıklayabilirsin.
  >
  >   `$data` değişkeninin kullanıldığı alanlar güncellenir.
  > * *Örnek Yol: webadmin\model*
  > * *Örn: C:\xampp\htdocs\ecommerce2\webadmin\model\sale\order.php*
* **Controller** dizinindeki Uygun dosyanın `getList` metodunda filtreleme değişkenlerini (filters) ve verileri oluşturma

  > Veriler $data değişkeni ile *.tpl* uzantılı dosyaya aktarılır.
  >
  > * Filtreleme değişkeni (filter) eklenir. Kaynak kodu için [buraya](https://github.com/yemreak/blog/blob/main/docs/tr/arsiv/web/broken-reference/README.md) tıklayabilirsin.
  > * Veri (data) oluşturma. Kaynak kod için [buraya](https://github.com/yemreak/blog/blob/main/docs/tr/arsiv/web/broken-reference/README.md) tıklayabilirsin.
  > * *Örnek Yol: webadmin\controller*
  > * *Örn: C:\xampp\htdocs\ecommerce2\webadmin\controller\sale\order.php*
* **View** kısmında filtre ekleme alanı oluştulur. Kaynak kod için [buraya](https://github.com/yemreak/blog/blob/main/docs/tr/arsiv/web/broken-reference/README.md) tıklayabilirsin.
  * Filtreleme butonunun js kısmındaki `filter()` metodunda güncelleme yapılır. Kaynak kod için [buraya](https://github.com/yemreak/blog/blob/main/docs/tr/arsiv/web/broken-reference/README.md) tıklayabilirsin.

### Filtre Alanı Ekleme <a href="#filtre-alani-ekleme" id="filtre-alani-ekleme"></a>

```
<?php<select name="filter_[names]">    <?php foreach ($[names] as $[name]) { ?>        <?php if ($[name]['[name_id]'] == $[name_id]) { ?>        <option value="<?php echo $[name][[name_id]]; ?>" selected="selected"><?php echo $[name]['name']; ?></option>        <?php } else { ?>        <option value="<?php echo $[name][[name_id]]; ?>"><?php echo $[name]['name']; ?></option>        <?php } ?>    <?php } ?></select>
```

### Filtreleme değişkeni oluşturma <a href="#filtreleme-degiskeni-olusturma" id="filtreleme-degiskeni-olusturma"></a>

```
if (isset($this->request->get['[filter_name]'])) {    $[filter_[name]] = $this->request->get['filter_name'];} else {    $filter_store_id = null;}
```

* `[name]` MySQL sütununua eş değer değişken ismidir.

### Filtreleme verisini oluşturma <a href="#filtreleme-verisini-olusturma" id="filtreleme-verisini-olusturma"></a>

```
$data = array(    'filter_[name]' => $filter_[name];);
```

* `[name]` MySQL sütununua eş değer değişken ismidir.

> Data verisinde birden fazla değişken olabilir. Örn:

```
$data = array(    'filter_store_id'        => $filter_store_id,    'filter_store_name'      => $filter_store_name,    'filter_order_id'        => $filter_order_id,    'filter_customer'        => $filter_customer,    'filter_order_status_id' => $filter_order_status_id,    'filter_total'           => $filter_total,    'filter_date_added'      => $filter_date_added,    'filter_date_modified'   => $filter_date_modified,    'filter_payment_method'  => $filter_payment_method,    'filter_[name]'          => $filter_[name],    'sort'                   => $sort,    'order'                  => $order,    'start'                  => ($page - 1) * $this->config->get('config_admin_limit'),    'limit'                  => $this->config->get('config_admin_limit'));
```

### Filtreleme URL'i oluşturma <a href="#filtreleme-urli-olusturma" id="filtreleme-urli-olusturma"></a>

```
if (isset($this->request->get['filter_[name]'])) {    $url .= '&filter_[name]=' . $this->request->get['filter_[name]'];}
```

> Her `$url = '';` aşaması için üstteki yapılır.

```
$this->data['filter_[name]'] = $filter_[name];
```

* `[name]` MySQL sütununua eş değer değişken ismidir.

### Filtreleme Sorgusu <a href="#filtreleme-sorgusu" id="filtreleme-sorgusu"></a>

```
if (!empty($data['filter_[name]'])) {    $sql .= " AND [tablo].[name] = '" . $this->db->escape($data['filter_[name]']) . "'";}
```

### Filtreleme filter() metodu <a href="#filtreleme-filter-metodu" id="filtreleme-filter-metodu"></a>

```
var filter_[name] = $('select[name=\'filter_[name]\']').val();​if (filter_[name]) {    url += '&filter_[name]=' + encodeURIComponent(filter_[name]);}
```

* `[name]` MySQL sütununua eş değer değişken ismidir.

## Karma Kodlar <a href="#karma-kodlar" id="karma-kodlar"></a>

### MySQL Kodları <a href="#mysql-kodlari" id="mysql-kodlari"></a>

```
SELECT [ID], [Sütun] FROM [Tablo] WHERE [ID] = [Sayı];UPDATE [Tablo] SET [Sütun] = [Değişken Tipine Uygun Değer] WHERE [ID] = [Sayı];INSERT INTO [Tablo] VALUES ([Sütun1 Değeri], [Sütun2 Değeri]);​CREATE TABLE IF NOT EXISTS [Tablo] (    [ID Sütunu] [Değişken Tipi] DEFAULT [Varsayılan Değer] PRIMARY KEY,    [Sütun] [Değişken Tipi]);​ALTER TABLE [Tablo] ADD COLUMN [Sütun] [Değişken Tipi] DEFAULT [Varsayılan Değeri] AFTER [Önceki Sütun];ALTER TABLE [Tablo] DROP COLUMN [Sütun];ALTER TABLE `cookplus_order` ADD COLUMN `cancel_status_id` int(1) DEFAULT '0';
```

### Checkbox kodu <a href="#checkbox-kodu" id="checkbox-kodu"></a>

OpenCard form verisine checkbox ekleme yapısı

```
<tr>    <td><?php echo $entry_[name]; ?></td>    <td>        <input type="checkbox" name="[name]" value="1" <?php if($[name]) echo 'checked="checked"'; ?> />    </td></tr>
```

> `name` Değişken ismi

### Controller'da view için değişken oluşturma kodu <a href="#controllerda-view-icin-degisken-olusturma-kodu" id="controllerda-view-icin-degisken-olusturma-kodu"></a>

```
$[veri ismi] = $this->model_catalog_manufacturer->getManufacturers();​foreach ($[veri ismi] as $[veri parçası]) {    $this->data['[veri ismi]'][$[veri parçası]['[özellik1]']] = array(        '[özellik2]' => $[veri parçası]['[özellik]'],        '[özellik3]' => $[veri parçası]['[özellik]']    );}
```

### Selection box kodu <a href="#selection-box-kodu" id="selection-box-kodu"></a>

```
<?php<select name="filter_[names]">    <?php foreach ($[names] as $[name]) { ?>        <?php if ($[name]['[name_id]'] == $[name_id]) { ?>        <option value="<?php echo $[name][[name_id]]; ?>" selected="selected"><?php echo $[name]['name']; ?></option>        <?php } else { ?>        <option value="<?php echo $[name][[name_id]]; ?>"><?php echo $[name]['name']; ?></option>        <?php } ?>    <?php } ?></select>
```
