Глобальный метод для создания ссылки в представлении

1

Я разрабатываю интернет-магазин, изначально все ссылки на продукты были такими:

/index.php/shop/product/1

но потом я хотел

/index.php/shop/product/product-slug

Затем я понимаю, что мне пришлось искать весь проект о том, где я размещаю ссылки на продукты и меняю.

Вопрос в том, как я могу сделать что-то подобное:

<?php foreach($recomanded_products as $recomanded_product): ?>

     <a href="<?= $product_link ?>"><?= lang('comanda') ?></a>

<?php endforeach; ?>

вместо

<?php foreach($recomanded_products as $recomanded_product): ?>

     <a href="<?= site_url('shop/produs/'.$recomanded_product->slug_product) ?>"><?= lang('comanda') ?></a>

<?php endforeach; ?>

поэтому, если я хочу изменить ссылку на изменение только в одном месте.

Что-то вроде ruby on rails, когда вы делаете <% = link_to 'Product', $ product%>

Может быть, помощник или создать из модели ссылку?

Я помечаю также рубины на рельсах по этому вопросу, может быть, у рубинового разработчика есть логика.

  • 0
    Хранить ссылки в базе данных? - Черт, я бы порекомендовал вам хранить все ссылки вашего меню / инфраструктуры в базе данных.
  • 0
    Я не думаю, что это хорошая логика. Может быть, помощник или из модели для создания ссылки?
Показать ещё 1 комментарий
Теги:
codeigniter

3 ответа

1
Лучший ответ

Вы можете создать для этого помощника. создать помощник в application/helpers/ как linkview_helper.php и в этом

   <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

    if(!function_exists('putLink'))
    {
        function putLink($value)
        {
           return site_url('shop/produs/'.$value);
        }
    }

теперь загрузите linkview вашего помощника. чтобы авторизовать это

  $autoload['helpers'] = array('linkview');

теперь использовать

 <?php foreach($recomanded_products as $recomanded_product): ?>
   <a href="<?= putLink($recomanded_product->slug_product) ?>"><?= lang('comanda') ?></a>
 <?php endforeach; ?>
  • 0
    И если я не хочу менять $recomanded_product->slug_product из представления в $recomanded_product->id_product я должен измениться снова во всем проекте.
  • 0
    если вы хотите, то вы должны поместить весь цикл foreach в помощник.
Показать ещё 3 комментария
1

Простейшим решением было бы создать вспомогательный класс. Я назвал его Linker в этом примере.

Таким образом, у вас действительно есть одно место, где вы можете вносить изменения, если вам нужно. Вы также можете добавить параметр для языка, внутренней/внешней ссылки и многое другое.

Linker.php

class Linker {
    /**
     * some more methods
     */
    public static function getInternalProduktLink( $product_id ) {
        // some rules for your linkpath
        $linkpath = "/index.php/shop/product/product-slug/";
        // result from your rules => $linkpath

        // maybe check if $product_id is an integer?
        $linkpath = "$linkpath/$product_id";

        return $linkpath;
    }

    public static function getExternalProduktLink( $product_id ) {
        // some rules for your linkpath
        // get your server url from somewhere
        $server = "http://www.example.com";
        $linkpath = "$server/index.php/shop/product/product-slug/";
        // result from your rules => $linkpath

        // maybe check if $product_id is an integer?
        $linkpath = "$linkpath/$product_id";

        return $linkpath;
    }
    /**
     * some more methods
     */
}

?>

В своем шаблоне вы можете назвать это следующим образом:

<a href="<?= Linker::getInternalProduktLink( $some_product_id) ?>"><?= lang('comanda') ?></a>
  • 0
    Если я выберу этот метод, внутри getInternalProduktLink или getExternalProduktLink я должен сделать новый запрос, чтобы получить слаг продукта из db.
  • 0
    если вам нужен product-slug вы можете передать его как параметр вместо $product_id
Показать ещё 5 комментариев
0

Я создал нового помощника

<?php

/**
 * Created by PhpStorm.
 * User: sebastian
 * Date: 04.11.2015
 * Time: 10:44
 */
class Linker
{
    public static function PLink( $data ) {

        return site_url('shop/produs/'.$data->slug_produs);

    }
}

Тогда в поле зрения:

<?php foreach($recomanded_products as $recomanded_product): ?>

     <a href="<?= Linker::PLink($recomanded_product) ?>"><?= $produs->nume_produs ?></a>

<?php endforeach; ?>
  • 0
    Отметьте решение и закройте вопрос :-)
  • 0
    Я не могу принять свой собственный ответ. Только через 2 дня.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню