在视图中创建链接的全局方法

时间:2015-11-04 08:20:13

标签: php ruby-on-rails codeigniter

我正在开发一个在线商店,最初的所有产品链接都是:

/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; ?>

所以如果我想改变链接只在一个地方改变。

当您制作&lt;%= link_to'产品',$ product%&gt;

时,像铁轨上的红宝石

也许是帮助者或从模型中创建链接?

我会在这个问题上标记ruby on rails,也许一个ruby开发人员带有逻辑。

3 个答案:

答案 0 :(得分: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>

答案 1 :(得分: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; ?>

答案 2 :(得分: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; ?>