本文整理汇总了PHP中tpl函数的典型用法代码示例。如果您正苦于以下问题:PHP tpl函数的具体用法?PHP tpl怎么用?PHP tpl使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了tpl函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: create
/**
* Creates tags cloud
* $cloud_data - array like (key => array(text, num)) OR $cloud_data - array like (text => num)
*/
function create($cloud_data = [], $params = [])
{
if (empty($cloud_data)) {
return '';
}
if (empty($params['object'])) {
$params['object'] = 'tags';
}
if (empty($params['action'])) {
$params['action'] = 'search';
}
if ($this->CLOUD_ORDER == 'text') {
ksort($cloud_data);
} elseif ($this->CLOUD_ORDER == 'num') {
arsort($cloud_data);
}
// Search for the max and min values of 'num' in array
$max_val = max($cloud_data);
$min_val = min($cloud_data);
foreach ((array) $cloud_data as $_text => $_num) {
// Creating cloud
if ($max_val !== $min_val) {
$_cloud_fsize = $this->CLOUD_MIN_FSIZE + ($this->CLOUD_MAX_FSIZE - $this->CLOUD_MIN_FSIZE) * ($_num - $min_val) / ($max_val - $min_val);
$_cloud_fsize = round($_cloud_fsize, 2);
} else {
$_cloud_fsize = 1;
}
$replace2 = ['num' => $_num, 'tag_text' => $_text, 'tag_search_url' => './?object=' . $params['object'] . '&action=' . $params['action'] . '&id=' . $params['id_prefix'] . ($params['amp_encode'] ? str_replace(urlencode('&'), urlencode(urlencode('&')), urlencode($_text)) : urlencode($_text)), 'cloud_fsize' => $_cloud_fsize];
$items .= tpl()->parse('tags/cloud_item', $replace2);
}
return $items;
}
示例2: __exception_handler
function __exception_handler($exception, $message = NULL, $file = NULL, $line = NULL)
{
$PHP_ERROR = func_num_args() === 5;
if ($PHP_ERROR and (error_reporting() & $exception) === 0) {
return;
}
if ($PHP_ERROR) {
$code = $exception;
$type = 'PHP Error';
$message = $type . ' ' . $message . ' ' . $file . ' ' . $line;
} else {
$code = $exception->getCode();
$type = get_class($exception);
$message = $exception->getMessage() . "\n" . $exception->getTraceAsString();
$file = $exception->getFile();
$line = $exception->getLine();
}
Log::error($type, $code, $message, $file, $line);
if (!DEBUG) {
$_file = tpl("error");
if (file_exists($_file)) {
ob_end_clean();
include $_file;
} else {
redirect('/', $message);
}
} else {
$str = '<style>body {font-size:12px;}</style>';
$str .= '<h1>操作失败!</h1><br />';
$str .= '<strong>错误信息:<strong><font color="red">' . $message . '</font><br />';
echo $str;
}
exit($code);
}
示例3: show
/**
*/
function show()
{
asset('jquery-jstree');
$slick_view = isset($_GET['CKEditorFuncNum']);
$body = tpl()->parse(__CLASS__ . '/main', ['ck_funcnum' => (int) $_GET['CKEditorFuncNum']]);
return $slick_view ? print common()->show_empty_page($body) : $body;
}
示例4: basket_main
/**
* basket_main
*/
function basket_main()
{
$products_ids = [];
$basket_contents = module('shop')->_basket_api()->get_all();
foreach ((array) $basket_contents as $_item_id => $_info) {
if ($_info["product_id"]) {
$products_ids[$_info["product_id"]] = $_info["product_id"];
}
}
if (!empty($products_ids)) {
$products_infos = db()->query_fetch_all("SELECT * FROM " . db('shop_products') . " WHERE active='1' AND id IN(" . implode(",", $products_ids) . ")");
$products_atts = module('shop')->_products_get_attributes($products_ids);
$group_prices = module('shop')->_get_group_prices($products_ids);
}
$total_price = 0;
foreach ((array) $products_infos as $_info) {
$_product_id = $_info["id"];
$_info["_group_price"] = $group_prices[$_product_id][module('shop')->USER_GROUP];
$quantity2 = $basket_contents[$_info["id"]]["quantity"];
$price = module('shop')->_product_get_price($_info);
$dynamic_atts = [];
foreach ((array) $products_atts[$_product_id] as $_attr_id => $_attr_info) {
if ($basket_contents[$_product_id]["atts"][$_attr_info["name"]] == $_attr_info["value"]) {
$dynamic_atts[$_attr_id] = "- " . $_attr_info["name"] . " " . $_attr_info["value"];
$price += $_attr_info["price"];
}
}
$total_price += $price * $quantity2;
$quantity += intval($quantity2);
}
$replace = ["total_price" => module('shop')->_format_price($total_price), "currency" => _prepare_html(module('shop')->CURRENCY), "quantity" => $quantity, "order_link" => "./?object=shop&action=basket", "basket_link" => "./?object=shop&action=basket"];
return tpl()->parse("shop/basket_main", $replace);
}
示例5: _tpl
public function _tpl($stpl_text = '', $replace = [], $name = '', $params = [])
{
if (!$name) {
$name = 'auto__' . get_called_class() . '__' . substr(md5($stpl_text), 0, 16);
}
return tpl()->parse_string($stpl_text, $replace, $name, $params);
}
示例6: add_receivers
function add_receivers()
{
$A = $this->_get_notification($_GET['id']);
$method_name = "_add_receivers_" . $A['receiver_type'];
if (!method_exists($this, $method_name) || !method_exists($this, $method_name . "_process")) {
js_redirect("./?object=" . $_GET['object']);
}
if (main()->is_post()) {
$method_name_process = $method_name . "_process";
$sql = $this->{$method_name_process}($_GET['id']);
$receivers = db()->get_2d($sql);
$sql_arr = [];
foreach ((array) $receivers as $v) {
if ($_POST['is_all'] == 1 || $_POST['id'][$v] == 1) {
$sql_arr[] = "({$_GET['id']}, '{$A['receiver_type']}', {$v}, 0)";
}
}
if (count($sql_arr) > 0) {
db()->query("REPLACE INTO `" . db('notifications_receivers') . "` (`notification_id`,`receiver_type`,`receiver_id`,`is_read`) VALUES " . implode(",", $sql_arr));
}
js_redirect("./?object=" . $_GET['object'] . "&action=view&id=" . $_GET['id']);
}
$replace = ['table' => $this->{$method_name}($_GET['id']), 'show_add_selected' => $A['receiver_type'] != 'user_id_tmp' ? 1 : 0];
return tpl()->parse($_GET['object'] . "/" . __FUNCTION__, $replace);
}
示例7: test_avail_arrays
public function test_avail_arrays()
{
// TODO: deep debug why
// For some reason it fails under current jenkins
if (getenv('CI') === 'jenkins') {
return false;
}
$old = tpl()->_avail_arrays;
$_GET['mytestvar'] = 'mytestvalue';
tpl()->_avail_arrays = ['get' => '_GET'];
$this->assertEquals('', self::_tpl('{get.not_exists}'));
$this->assertEquals('_mytestvalue_', self::_tpl('_{get.mytestvar}_'));
$this->assertEquals('good', self::_tpl('{if(get.mytestvar eq mytestvalue)}good{else}bad{/if}'));
$this->assertEquals('good', self::_tpl('{if(get.mytestvar ne "")}good{else}bad{/if}'));
$this->assertEquals('good', self::_tpl('{if(get.mytestvar ne something_else)}good{else}bad{/if}'));
$data = ['k1' => 'v1', 'k2' => 'v2', 'k3' => 'v3'];
$_GET['myarray'] = $data;
$this->assertEquals(' k1=v1 k2=v2 k3=v3 ', self::_tpl('{foreach(data)} {_key}={_val} {/foreach}', ['data' => $data]));
$this->assertEquals(' k1=v1 k2=v2 k3=v3 ', self::_tpl('{foreach(data.myarray)} {_key}={_val} {/foreach}', ['data' => ['myarray' => $data]]));
$this->assertEquals('', self::_tpl('{foreach(data.not_exists)} {_key}={_val} {/foreach}', ['data' => ['myarray' => $data]]));
$this->assertEquals('k1=v1', self::_tpl('{foreach(data.myarray)}{if(_key eq k1)}{_key}={_val}{/if}{/foreach}', ['data' => ['myarray' => $data]]));
$this->assertEquals('k2=v2', self::_tpl('{foreach(data.myarray)}{if(_key eq k2)}{_key}={_val}{/if}{/foreach}', ['data' => ['myarray' => $data]]));
$this->assertEquals('k3=v3', self::_tpl('{foreach(data.myarray)}{if(_key eq k3)}{_key}={_val}{/if}{/foreach}', ['data' => ['myarray' => $data]]));
$this->assertEquals(' k1=v1 k2=v2 k3=v3 ', self::_tpl('{foreach(get.myarray)} {_key}={_val} {/foreach}'));
$this->assertEquals('', self::_tpl('{foreach(get.not_exists)} {_key}={_val} {/foreach}'));
$this->assertEquals('k1=v1', self::_tpl('{foreach(get.myarray)}{if(_key eq k1)}{_key}={_val}{/if}{/foreach}'));
$this->assertEquals('k2=v2', self::_tpl('{foreach(get.myarray)}{if(_key eq k2)}{_key}={_val}{/if}{/foreach}'));
$this->assertEquals('k3=v3', self::_tpl('{foreach(get.myarray)}{if(_key eq k3)}{_key}={_val}{/if}{/foreach}'));
tpl()->_avail_arrays = $old;
}
示例8: menu
function menu()
{
global $db;
//判断是否登陆
!isset($_SESSION['user']) && exit('Please login!');
tpl('menu');
}
示例9: products_similar_by_basket
function products_similar_by_basket($id)
{
$sql_order_id = "SELECT order_id FROM " . db('shop_order_items') . " WHERE product_id = " . $id;
$orders = db()->query($sql_order_id);
while ($A = db()->fetch_assoc($orders)) {
$order_id .= $A["order_id"] . ",";
}
$order_id = rtrim($order_id, ",");
if (!empty($order_id)) {
$sql_product_id = "SELECT product_id FROM " . db('shop_order_items') . " WHERE order_id IN ( " . $order_id . ") AND product_id != " . $id;
$products = db()->query($sql_product_id);
while ($A = db()->fetch_assoc($products)) {
$product_id .= $A["product_id"] . ",";
}
$product_id = rtrim($product_id, ",");
}
if (!empty($product_id)) {
$sql = "SELECT * FROM " . db('shop_products') . " WHERE id in ( " . $product_id . ")";
$product = db()->query_fetch_all($sql);
foreach ((array) $product as $k => $product_info) {
$thumb_path = $product_info["url"] . "_" . $product_info["id"] . "_1" . module("shop")->THUMB_SUFFIX . ".jpg";
$URL_PRODUCT_ID = module("shop")->_product_id_url($product_info);
$items[$product_info["id"]] = ["name" => _prepare_html($product_info["name"]), "price" => module("shop")->_format_price(module("shop")->_product_get_price($product_info)), "currency" => _prepare_html(module("shop")->CURRENCY), "image" => file_exists(module("shop")->products_img_dir . $thumb_path) ? module("shop")->products_img_webdir . $thumb_path : "", "link" => $product_info["external_url"] ? $product_info["external_url"] : process_url("./?object=shop&action=product_details&id=" . $URL_PRODUCT_ID), "special" => ""];
}
}
$replace = ["items" => $items, "title" => "Those who purchased this product also buy"];
return tpl()->parse("shop/products_similar_by_price", $replace);
}
示例10: _order_step_start
/**
* Order step
*/
function _order_step_start($FORCE_DISPLAY_FORM = false)
{
module('shop')->_basket_save();
$basket_contents = module('shop')->_basket_api()->get_all();
$products_ids = [];
foreach ((array) $basket_contents as $_item_id => $_info) {
if ($_info["product_id"]) {
$products_ids[$_info["product_id"]] = $_info["product_id"];
}
}
if (!empty($products_ids)) {
$products_infos = db()->query_fetch_all("SELECT * FROM " . db('shop_products') . " WHERE id IN(" . implode(",", $products_ids) . ") AND active='1'");
$products_atts = module('shop')->_products_get_attributes($products_ids);
$group_prices = module('shop')->_get_group_prices($products_ids);
}
$total_price = 0;
foreach ((array) $products_infos as $_info) {
$_product_id = $_info["id"];
$_info["_group_price"] = $group_prices[$_product_id][module('shop')->USER_GROUP];
$quantity = $basket_contents[$_info["id"]]["quantity"];
$price = module('shop')->_product_get_price($_info);
$dynamic_atts = [];
foreach ((array) $products_atts[$_product_id] as $_attr_id => $_attr_info) {
if ($basket_contents[$_product_id]["atts"][$_attr_info["name"]] == $_attr_info["value"]) {
$dynamic_atts[$_attr_id] = "- " . $_attr_info["name"] . " " . $_attr_info["value"];
$price += $_attr_info["price"];
}
}
$URL_PRODUCT_ID = module('shop')->_product_id_url($_info);
$products[$_info["id"]] = ["name" => _prepare_html($_info["name"]), "price" => module('shop')->_format_price($price), "currency" => _prepare_html(module('shop')->CURRENCY), "quantity" => intval($quantity), "details_link" => process_url("./?object=shop&action=product_details&id=" . $URL_PRODUCT_ID), "dynamic_atts" => !empty($dynamic_atts) ? implode("\n<br />", $dynamic_atts) : "", "cat_name" => _prepare_html(module('shop')->_shop_cats[$_info["cat_id"]]), "cat_url" => process_url("./?object=shop&action=products_show&id=" . module('shop')->_shop_cats_all[$_info["cat_id"]]['url'])];
$total_price += $price * $quantity;
}
$replace = ["products" => $products, "total_price" => module('shop')->_format_price($total_price), "currency" => _prepare_html(module('shop')->CURRENCY), "back_link" => "./?object=shop&action=basket", "next_link" => "./?object=shop&action=order&id=delivery", "cats_block" => module('shop')->_categories_show()];
return tpl()->parse("shop/order_start", $replace);
}
示例11: events
public function events()
{
if (!env('student')) {
redirect('m=login');
}
$updisciplineId = val($_REQUEST, 'updisciplineId');
$learningMode = val($_REQUEST, 'learningMode');
if (empty($updisciplineId) || empty($learningMode)) {
throw new Exception('Missed required param', 404);
}
$updiscipline = entry_sql('SELECT * FROM updiscipline WHERE updisciplineId=:updisciplineId', array(':updisciplineId' => $updisciplineId));
if (empty($updiscipline)) {
throw new Exception('Updiscipline not found', 404);
}
$groupPeriod = entry_sql('SELECT gp.* FROM group_history gh INNER JOIN group_period gp USING(groupPeriodId) WHERE gh.studentId=:studentId AND gp.sersemester=:sersemester', array('studentId' => studentId(), 'sersemester' => $updiscipline['sersemester']));
if (empty($groupPeriod)) {
throw new Exception('Cannot detect groupPeriod', 404);
}
$events = entries_sql('SELECT * FROM event WHERE updisciplineId=:updisciplineId AND groupPeriodId=:groupPeriodId AND learningMode=:learningMode', array('groupPeriodId' => $groupPeriod['groupPeriodId'], 'updisciplineId' => $updiscipline['updisciplineId'], 'learningMode' => $learningMode));
array_walk($events, function (&$event, $k, $studentId) {
$event['c'] = material::i($event['instanceType'])->c();
$event['grade'] = material::i($event['instanceType'])->get_grade($event['instanceId'], $studentId);
}, studentId());
env('breadcrumbs', array(array(lng('up:disciplines'), '/?c=up'), array($updiscipline['disciplineName'], '/?c=up&m=events&updisciplineId=' . $updisciplineId . '&learningMode=' . $learningMode), lng('up:events')));
tpl('up/events', array('updiscipline' => $updiscipline, 'events' => $events, 'result' => entry_sql('SELECT * FROM result WHERE studentId=:studentId AND updisciplineId=:updisciplineId AND learningMode=:learningMode', array('studentId' => studentId(), 'updisciplineId' => $updiscipline['updisciplineId'], 'learningMode' => $learningMode))));
}
示例12: pics_browser
function pics_browser()
{
if (isset($_GET['active']) && $_GET['active'] == 1) {
$active = ' AND p.active = \'1\' ';
} elseif (isset($_GET['active']) && $_GET['active'] == 0) {
$active = ' AND p.active = \'\' ';
} else {
$active = '';
}
if (main()->is_post()) {
foreach ($_POST['delete'] as $k => $v) {
list($id, $product_id) = explode("_", $k);
module('manage_shop')->_product_image_delete($id, $product_id);
}
}
$cats_list = _class('_shop_categories', 'modules/shop/')->recursive_get_child_ids(62521);
$sql = "SELECT `i`.`product_id`,`i`.`id` FROM `" . db('shop_products') . "` AS `p`, `" . db('shop_product_images') . "` AS `i` WHERE `p`.`id`=`i`.`product_id` AND `p`.`cat_id` IN ('" . implode("','", $cats_list) . "')" . $active;
list($add_sql, $pages, $total_records, $page_current, $pages_total, $pages_limited) = common()->divide_pages($sql);
$R = db()->query($sql . $add_sql);
$items = [];
while ($A = db()->fetch_assoc($R)) {
$_cls_products = _class('_shop_products', 'modules/shop/');
$image = $_cls_products->_product_image($A['product_id'], true);
$items[] = ['id' => $A['product_id'], 'image_id' => $A['id'], 'image' => $image['big']];
}
$replace = ['items' => $items, 'total' => $total_records, 'pages' => $pages];
$tpl_name = 'manage_shop/pics_browser';
return tpl()->parse($tpl_name, $replace);
}
示例13: tpl_nav_page_tree
/**
* Include the page tree navigation
* @param int/WP_Post $page Post ID or object
*/
function tpl_nav_page_tree($page)
{
$tree = get_page_tree($page);
if (!empty($tree)) {
tpl('nav', 'page-tree', array('tree' => $tree));
}
}
示例14: product_details
function product_details()
{
if (!$_GET["id"]) {
return is_redirect("./?object=shop");
}
// Get products from database
if (is_numeric($_GET["id"])) {
$add_sql = "id= '" . intval($_GET["id"]);
} else {
$add_sql = "url='" . _es($_GET['id']);
}
$sql = "SELECT * FROM " . db('shop_products') . " WHERE active='1' AND " . $add_sql . "'";
$product_info = db()->query_fetch($sql);
// Required for comments
module("shop")->_comments_params["object_id"] = $product_info["id"];
module("shop")->_comments_params["objects_ids"] = $product_info["id"];
$N = module("shop")->_get_num_comments();
$N = $N[$product_info["id"]];
if ($N == "") {
$N = 0;
}
$dirs = sprintf("%06s", $product_info["id"]);
$dir2 = substr($dirs, -3, 3);
$dir1 = substr($dirs, -6, 3);
$mpath = $dir1 . "/" . $dir2 . "/";
$group_prices = module("shop")->_get_group_prices($product_info["id"]);
$product_info["_group_price"] = $group_prices[module("shop")->USER_GROUP];
module("shop")->_product_info = $product_info;
$atts = module("shop")->_products_get_attributes($product_info["id"]);
$thumb_path = $product_info["url"] . "_" . $product_info["id"] . "_" . $product_info["image"] . module("shop")->THUMB_SUFFIX . ".jpg";
$img_path = $product_info["url"] . "_" . $product_info["id"] . "_" . $product_info["image"] . module("shop")->FULL_IMG_SUFFIX . ".jpg";
if ($product_info["image"] == 0) {
$image = "";
} else {
$image_files = _class('dir')->scan_dir(module("shop")->products_img_dir . $mpath, true, "/" . $product_info["url"] . "_" . $product_info["id"] . ".+?_small\\.jpg" . "/");
$reg = "/" . $product_info["url"] . "_" . $product_info["id"] . "_(?P<content>[\\d]+)_small\\.jpg/";
foreach ((array) $image_files as $filepath) {
preg_match($reg, $filepath, $rezult);
$i = $rezult["content"];
if ($i != $product_info["image"]) {
$thumb_temp = module("shop")->products_img_webdir . $mpath . $product_info["url"] . "_" . $product_info["id"] . "_" . $i . module("shop")->THUMB_SUFFIX . ".jpg";
$img_temp = module("shop")->products_img_webdir . $mpath . $product_info["url"] . "_" . $product_info["id"] . "_" . $i . module("shop")->FULL_IMG_SUFFIX . ".jpg";
$replace2 = ["thumb_path" => $thumb_temp, "img_path" => $img_temp, "name" => $product_info["url"]];
$image .= tpl()->parse("shop/image_items", $replace2);
}
}
}
$URL_PRODUCT_ID = module("shop")->_product_id_url($product_info);
$sql_man = "SELECT * FROM " . db('shop_manufacturers') . " WHERE id = " . $product_info["manufacturer_id"];
$manufacturer = db()->query_fetch($sql_man);
if (module("shop")->SHOW_products_similar_by_price == true) {
$products_similar_by_price = module("shop")->products_similar_by_price($product_info["price"], $product_info["id"]);
}
if (module("shop")->products_similar_by_basket == true) {
$products_similar_by_basket = module("shop")->products_similar_by_basket($product_info["id"]);
}
$replace = ["name" => _prepare_html($product_info["name"]), "model" => _prepare_html($product_info["model"]), "desc" => $product_info["description"], "manufacturer" => _prepare_html(module("shop")->_manufacturer[$product_info["manufacturer_id"]]["name"]), "url_manufacturer" => process_url("./?object=shop&action=products_show&id=" . module("shop")->_manufacturer[$product_info["manufacturer_id"]]["url"]), "date" => _format_date($product_info["add_date"], "long"), "price" => module("shop")->_format_price(module("shop")->_product_get_price($product_info)), "currency" => _prepare_html(module("shop")->CURRENCY), "thumb_path" => file_exists(module("shop")->products_img_dir . $mpath . $img_path) ? module("shop")->products_img_webdir . $mpath . $img_path : "", "img_path" => file_exists(module("shop")->products_img_dir . $mpath . $img_path) ? module("shop")->products_img_webdir . $mpath . $img_path : "", "image" => $image, "basket_add_url" => $product_info["external_url"] ? $product_info["external_url"] : process_url("./?object=shop&action=basket_add&id=" . $URL_PRODUCT_ID), "external_url" => intval((bool) $product_info["external_url"]), "back_url" => process_url("./?object=shop"), "show_basket_url" => process_url("./?object=shop&action=basket"), "dynamic_atts" => module("shop")->_get_select_attributes($atts), "cats_block" => module("shop")->_categories_show(), "cat_name" => _prepare_html(module("shop")->_shop_cats[$product_info["cat_id"]]), "cat_url" => process_url("./?object=shop&action=product_details&id=" . module("shop")->_shop_cats_all[$product_info["cat_id"]]['url']), 'comments' => module("shop")->_view_comments(), "N" => $N, "products_similar_by_price" => $products_similar_by_price, "products_similar_by_basket" => $products_similar_by_basket, "product_related" => module("shop")->products_related($product_info["id"])];
db()->query("UPDATE " . db('shop_products') . " SET viewed = viewed+1 , last_viewed_date = " . time() . " WHERE " . $add_sql . "'");
return tpl()->parse("shop/details", $replace);
}
示例15: products_similar_by_price
function products_similar_by_price($price, $id)
{
$price_min = floor($price - $price * 10 / 100);
$price_max = ceil($price + $price * 10 / 100);
$sql1 = "SELECT category_id FROM " . db('shop_product_to_category') . " WHERE product_id = " . $id . "";
$cat_id = db()->query($sql1);
while ($A = db()->fetch_assoc($cat_id)) {
$cats_id .= $A["category_id"] . ",";
}
$cats_id = rtrim($cats_id, ",");
$sql2 = "SELECT product_id FROM " . db('shop_product_to_category') . " WHERE category_id IN ( " . $cats_id . ")";
$prod = db()->query($sql2);
while ($A = db()->fetch_assoc($prod)) {
$prods .= $A["product_id"] . ",";
}
$prods = rtrim($prods, ",");
$sql = "SELECT * FROM " . db('shop_products') . " WHERE price > " . $price_min . " AND price < " . $price_max . " AND id != " . $id . " AND id IN(" . $prods . ")";
$product = db()->query_fetch_all($sql);
foreach ((array) $product as $k => $product_info) {
$thumb_path = $product_info["url"] . "_" . $product_info["id"] . "_1" . module("shop")->THUMB_SUFFIX . ".jpg";
$URL_PRODUCT_ID = module("shop")->_product_id_url($product_info);
$items[$product_info["id"]] = ["name" => _prepare_html($product_info["name"]), "price" => module("shop")->_format_price(module("shop")->_product_get_price($product_info)), "currency" => _prepare_html(module("shop")->CURRENCY), "image" => file_exists(module("shop")->products_img_dir . $thumb_path) ? module("shop")->products_img_webdir . $thumb_path : "", "link" => $product_info["external_url"] ? $product_info["external_url"] : process_url("./?object=shop&action=product_details&id=" . $URL_PRODUCT_ID), "special" => ""];
}
$replace = ["items" => $items, "title" => "Similar price"];
return tpl()->parse("shop/products_similar_by_price", $replace);
}