Я разрабатываю интернет-магазин, изначально все ссылки на продукты были такими:
/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%>
Может быть, помощник или создать из модели ссылку?
Я помечаю также рубины на рельсах по этому вопросу, может быть, у рубинового разработчика есть логика.
Вы можете создать для этого помощника. создать помощник в 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; ?>
$recomanded_product->slug_product
из представления в $recomanded_product->id_product
я должен измениться снова во всем проекте.
Простейшим решением было бы создать вспомогательный класс. Я назвал его 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>
product-slug
вы можете передать его как параметр вместо $product_id
Я создал нового помощника
<?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; ?>