вопрос
Помогите исправить ошибку в файле php, писали мне его на заказ, сейчас перешел на 10.6 и появилась ошибка, с автором связаться не могу.
Вот сам плюс + в htaccess RewriteRule ^view/([0-9]+)/$ engine/ajax/view.php?id=$1 [L]
При помощи ajax по адресу сайт/view/news-id/ показывал содержимое шаблона view.tpl Все было хорошо пока не перешел на 10.6 и теперь если в шаблоне есть ноль показывает Array
Кто разбирается подскажите как исправить, или хотя бы в чем может быть проблема, пытался гуглить но безрезультатно.
Заранее спасибо за любую помощь.
Вот сам
<?php
@error_reporting ( E_ALL ^ E_WARNING ^ E_NOTICE );
@ini_set ( 'display_errors', true );
@ini_set ( 'html_errors', false );
@ini_set ( 'error_reporting', E_ALL ^ E_WARNING ^ E_NOTICE );
define( 'DATALIFEENGINE', true );
define( 'ROOT_DIR', substr( dirname( __FILE__ ), 0, -12 ) );
define( 'ENGINE_DIR', ROOT_DIR . '/engine' );
include ENGINE_DIR . '/data/config.php';
if( $config['http_home_url'] == "" ) {
$config['http_home_url'] = explode( "engine/ajax/view.php", $_SERVER['PHP_SELF'] );
$config['http_home_url'] = reset( $config['http_home_url'] );
$config['http_home_url'] = "http://" . $_SERVER['HTTP_HOST'] . $config['http_home_url'];
}
require_once ENGINE_DIR . '/classes/mysql.php';
require_once ENGINE_DIR . '/data/dbconfig.php';
require_once ENGINE_DIR . '/modules/functions.php';
require_once ENGINE_DIR . '/classes/templates.class.php';
if ($config['allow_registration'] == "yes") {
require_once ENGINE_DIR . '/modules/sitelogin.php';
}
//################# Определение групп пользователей
$user_group = get_vars( "usergroup" );
if( ! $user_group ) {
$user_group = array ();
$db->query( "SELECT * FROM " . USERPREFIX . "_usergroups ORDER BY id ASC" );
while ( $row = $db->get_row() ) {
$user_group[$row['id']] = array ();
foreach ( $row as $key => $value ) {
$user_group[$row['id']][$key] = stripslashes($value);
}
}
set_vars( "usergroup", $user_group );
$db->free();
}
// Get ID
$news_id = (int)$_GET['id'];
if (!$news_id) die('Hacking...');
// Get (check) news By ID
$news = $db->super_query("SELECT short_story,xfields,title,category,alt_name, allow_rate,rating,vote_num FROM ".PREFIX."_post p LEFT JOIN ".PREFIX."_post_extras pe ON p.id = pe.news_id WHERE id = '{$news_id}' AND approve = 1 LIMIT 1 ");
if (!$news || empty($news) || !is_array($news)) die('No news found');
$tpl = new dle_template( );
$tpl->dir = ROOT_DIR . '/templates/' . $config['skin'];
define( 'TEMPLATE_DIR', $tpl->dir );
$tpl->load_template('view.tpl');
$news_data = array();
// Get Image, parse short_story
preg_match('#<img.+?src="([^"]+)".+?>#is'.($config['charset']=='utf-8'?'u':''),$news['short_story'],$image_parsed);
if (!empty($image_parsed) && isset($image_parsed[1])) {
$news_data['{image}'] = $image_parsed[1];
} else {
$news_data['{image}'] = '{THEME}/images/noimage.png';
}
// Get ShortStort cleared
$news_data['{text}'] = str_replace( "</p><p>", " ", $news['short_story'] );
$news_data['{text}'] = strip_tags( $news_data['{text}'], "<br>" );
$news_data['{text}'] = trim(str_replace( "<br>", " ", str_replace( "<br />", " ", str_replace( "\n", " ", str_replace( "\r", "", $news_data['{text}'] ) ) ) ));
$tpl->set(false,$news_data);
// Additional options
# - Text Limit option
if ( preg_match( "#\\{text limit=['\"](.+?)['\"]\\}#i", $tpl->copy_template, $textLimitMatches ) ) {
$textLimit = (int)$textLimitMatches[1];
if( $textLimit AND dle_strlen( $news_data['{text}'], $config['charset'] ) > $textLimit ) {
$news_data['{text}'] = dle_substr( $news_data['{text}'], 0, $textLimit, $config['charset'] );
if( ($temp_dmax = dle_strrpos( $news_data['{text}'], ' ', $config['charset'] )) ) $news_data['{text}'] = dle_substr( $news_data['{text}'], 0, $temp_dmax, $config['charset'] );
$news_data['{text}'] .= '...';
}
$tpl->set( $textLimitMatches[0], $news_data['{text}'] );
}
# xFields
$xfields = xfieldsload();
$xfieldsdata = xfieldsdataload( $news['xfields'] );
foreach ( $xfields as $value ) {
$preg_safe_name = preg_quote( $value[0], "'" );
if ( $value[6] AND !empty( $xfieldsdata[$value[0]] ) ) {
$temp_array = explode( ",", $xfieldsdata[$value[0]] );
$value3 = array();
foreach ($temp_array as $value2) {
$value2 = trim($value2);
$value2 = str_replace("'", "'", $value2);
if( $config['allow_alt_url'] == "yes" ) $value3[] = "<a href=\"" . $config['http_home_url'] . "xfsearch/" . urlencode( $value2 ) . "/\">" . $value2 . "</a>";
else $value3[] = "<a href=\"$PHP_SELF?do=xfsearch&xf=" . urlencode( $value2 ) . "\">" . $value2 . "</a>";
}
$xfieldsdata[$value[0]] = implode(", ", $value3);
unset($temp_array);
unset($value2);
unset($value3);
}
if( empty( $xfieldsdata[$value[0]] ) ) {
$tpl->copy_template = preg_replace( "'\\[xfgiven_{$preg_safe_name}\\](.*?)\\[/xfgiven_{$preg_safe_name}\\]'is", "", $tpl->copy_template );
$tpl->copy_template = str_replace( "[xfnotgiven_{$value[0]}]", "", $tpl->copy_template );
$tpl->copy_template = str_replace( "[/xfnotgiven_{$value[0]}]", "", $tpl->copy_template );
} else {
$tpl->copy_template = preg_replace( "'\\[xfnotgiven_{$preg_safe_name}\\](.*?)\\[/xfnotgiven_{$preg_safe_name}\\]'is", "", $tpl->copy_template );
$tpl->copy_template = str_replace( "[xfgiven_{$value[0]}]", "", $tpl->copy_template );
$tpl->copy_template = str_replace( "[/xfgiven_{$value[0]}]", "", $tpl->copy_template );
}
$xfieldsdata[$value[0]] = stripslashes( $xfieldsdata[$value[0]] );
$tpl->copy_template = str_replace( "[xfvalue_{$value[0]}]", $xfieldsdata[$value[0]], $tpl->copy_template );
if ( preg_match( "#\\[xfvalue_{$preg_safe_name} limit=['\"](.+?)['\"]\\]#i", $tpl->copy_template, $matches ) ) {
$count= intval($matches[1]);
$xfieldsdata[$value[0]] = str_replace( "</p><p>", " ", $xfieldsdata[$value[0]] );
$xfieldsdata[$value[0]] = strip_tags( $xfieldsdata[$value[0]], "<br>" );
$xfieldsdata[$value[0]] = trim(str_replace( "<br>", " ", str_replace( "<br />", " ", str_replace( "\n", " ", str_replace( "\r", "", $xfieldsdata[$value[0]] ) ) ) ));
if( $count AND dle_strlen( $xfieldsdata[$value[0]], $config['charset'] ) > $count ) {
$xfieldsdata[$value[0]] = dle_substr( $xfieldsdata[$value[0]], 0, $count, $config['charset'] );
if( ($temp_dmax = dle_strrpos( $xfieldsdata[$value[0]], ' ', $config['charset'] )) ) $xfieldsdata[$value[0]] = dle_substr( $xfieldsdata[$value[0]], 0, $temp_dmax, $config['charset'] );
}
$tpl->set( $matches[0], $xfieldsdata[$value[0]] );
}
}
# Rating
if( $news['allow_rate'] ) {
if( $config['short_rating'] and $user_group[$member_id['user_group']]['allow_rating'] ) $tpl->set( '{rating}', ShowRating( $news['id'], $news['rating'], $news['vote_num'], 1 ) );
else $tpl->set( '{rating}', ShowRating( $news['id'], $news['rating'], $news['vote_num'], 0 ) );
$tpl->set( '{vote-num}', "<span id=\"vote-num-id-".$news['id']."\">".$news['vote_num']."</span>" );
$tpl->set( '{rate}', str_replace(",",".",round($news['rating']/max(1,$news['vote_num']),1)));
$tpl->set( '[rating]', "" );
$tpl->set( '[/rating]', "" );
} else {
$tpl->set( '{rating}', "" );
$tpl->set( '{vote-num}', "" );
$tpl->set_block( "'\\[rating\\](.*?)\\[/rating\\]'si", "" );
}
$tpl->compile('content');
$tpl->result['content'] = str_ireplace( '{THEME}', $config['http_home_url'] . 'templates/' . $config['skin'], $tpl->result['content'] );
$result = $tpl->result['content'];
@header( "Content-type: text/html; charset=" . $config['charset'] );
echo $result;
?>
При помощи ajax по адресу сайт/view/news-id/ показывал содержимое шаблона view.tpl Все было хорошо пока не перешел на 10.6 и теперь если в шаблоне есть ноль показывает Array
Кто разбирается подскажите как исправить, или хотя бы в чем может быть проблема, пытался гуглить но безрезультатно.
Заранее спасибо за любую помощь.
Ответил: ПафНутиЙ
Держите.
Проблема была из-за некорректного назначения тегов шаблона, что-то там внутри шаблонизатора не так отрабатывало судя по всему.
Так же сделал небольшой рефакторинг кода и добавил кеширование, а то как то совсем грустно, когда на пустом месте рождаются лишние запрос к БД.
Проблема была из-за некорректного назначения тегов шаблона, что-то там внутри шаблонизатора не так отрабатывало судя по всему.
Так же сделал небольшой рефакторинг кода и добавил кеширование, а то как то совсем грустно, когда на пустом месте рождаются лишние запрос к БД.
<?php
// Get ID
$news_id = ((int) $_GET['id'] > 0) ? (int) $_GET['id'] : false;
if (!$news_id) {
die('Hacking...');
}
@error_reporting ( E_ALL ^ E_WARNING ^ E_NOTICE );
@ini_set ( 'display_errors', true );
@ini_set ( 'html_errors', false );
@ini_set ( 'error_reporting', E_ALL ^ E_WARNING ^ E_NOTICE );
define( 'DATALIFEENGINE', true );
define( 'ROOT_DIR', substr( dirname( __FILE__ ), 0, -12 ) );
define( 'ENGINE_DIR', ROOT_DIR . '/engine' );
include ENGINE_DIR . '/data/config.php';
date_default_timezone_set ( $config['date_adjust'] );
if ($config['http_home_url'] == "") {
$config['http_home_url'] = explode("engine/ajax/view.php", $_SERVER['PHP_SELF']);
$config['http_home_url'] = reset($config['http_home_url']);
$config['http_home_url'] = "http://" . $_SERVER['HTTP_HOST'] . $config['http_home_url'];
}
require_once ENGINE_DIR . '/classes/mysql.php';
require_once ENGINE_DIR . '/data/dbconfig.php';
require_once ENGINE_DIR . '/modules/functions.php';
require_once ENGINE_DIR . '/classes/templates.class.php';
dle_session();
$is_logged = false;
$member_id = array();
//################# Определение групп пользователей
$user_group = get_vars("usergroup");
if (!$user_group) {
$user_group = array();
$db->query("SELECT * FROM " . USERPREFIX . "_usergroups ORDER BY id ASC");
while ($row = $db->get_row()) {
$user_group[$row['id']] = array();
foreach ($row as $key => $value) {
$user_group[$row['id']][$key] = stripslashes($value);
}
}
set_vars("usergroup", $user_group);
$db->free();
}
if (!$is_logged) {
$member_id['user_group'] = 5;
}
if ($config['allow_registration']) {
require_once ENGINE_DIR . '/modules/sitelogin.php';
}
$ajaxView = false;
$ajaxView = dle_cache('news', 'ajax_view_' . $news_id . $config['skin'], true);
if (!$ajaxView) {
// Get (check) news By ID
$news = $db->super_query("SELECT id, short_story, xfields, title, category, alt_name, allow_rate, rating, vote_num FROM " . PREFIX . "_post p LEFT JOIN " . PREFIX . "_post_extras pe ON p.id = pe.news_id WHERE id = '{$news_id}' AND approve = 1");
if (!$news['id']) {
die('No news found');
}
$tpl = new dle_template();
$tpl->dir = ROOT_DIR . '/templates/' . $config['skin'];
define('TEMPLATE_DIR', $tpl->dir);
$tpl->load_template('view.tpl');
$news_data = array();
// Get Image, parse short_story
preg_match('#<img.+?src="([^"]+)".+?>#is' . ($config['charset'] == 'utf-8' ? 'u' : ''), $news['short_story'], $image_parsed);
if (!empty($image_parsed) && isset($image_parsed[1])) {
$image = $image_parsed[1];
} else {
$image = '{THEME}/images/noimage.png';
}
// Get ShortStort cleared
$newsText = str_replace("</p><p>", " ", $news['short_story']);
$newsText = strip_tags($newsText, "<br>");
$newsText = trim(str_replace("<br>", " ", str_replace("<br />", " ", str_replace("\n", " ", str_replace("\r", "", $newsText)))));
// Additional options
# - Text Limit option
if (preg_match("#\\{text limit=['\"](.+?)['\"]\\}#i", $tpl->copy_template, $textLimitMatches)) {
$textLimit = (int) $textLimitMatches[1];
if ($textLimit AND dle_strlen($newsText, $config['charset']) > $textLimit) {
$newsText = dle_substr($newsText, 0, $textLimit, $config['charset']);
if (($temp_dmax = dle_strrpos($newsText, ' ', $config['charset']))) {
$newsText = dle_substr($newsText, 0, $temp_dmax, $config['charset']);
}
$newsText .= '...';
}
$tpl->set($textLimitMatches[0], $newsText);
}
$tpl->set('{image}', $image);
$tpl->set('{text}', $newsText);
# xFields
$xfields = xfieldsload();
$xfieldsdata = xfieldsdataload($news['xfields']);
foreach ($xfields as $value) {
$preg_safe_name = preg_quote($value[0], "'");
if ($value[6] AND !empty($xfieldsdata[$value[0]])) {
$temp_array = explode(",", $xfieldsdata[$value[0]]);
$value3 = array();
foreach ($temp_array as $value2) {
$value2 = trim($value2);
$value2 = str_replace("'", "'", $value2);
if ($config['allow_alt_url'] == "yes") {
$value3[] = "<a href=\"" . $config['http_home_url'] . "xfsearch/" . urlencode($value2) . "/\">" . $value2 . "</a>";
} else {
$value3[] = "<a href=\"$PHP_SELF?do=xfsearch&xf=" . urlencode($value2) . "\">" . $value2 . "</a>";
}
}
$xfieldsdata[$value[0]] = implode(", ", $value3);
unset($temp_array);
unset($value2);
unset($value3);
}
if (empty($xfieldsdata[$value[0]])) {
$tpl->copy_template = preg_replace("'\\[xfgiven_{$preg_safe_name}\\](.*?)\\[/xfgiven_{$preg_safe_name}\\]'is", "", $tpl->copy_template);
$tpl->copy_template = str_replace("[xfnotgiven_{$value[0]}]", "", $tpl->copy_template);
$tpl->copy_template = str_replace("[/xfnotgiven_{$value[0]}]", "", $tpl->copy_template);
} else {
$tpl->copy_template = preg_replace("'\\[xfnotgiven_{$preg_safe_name}\\](.*?)\\[/xfnotgiven_{$preg_safe_name}\\]'is", "", $tpl->copy_template);
$tpl->copy_template = str_replace("[xfgiven_{$value[0]}]", "", $tpl->copy_template);
$tpl->copy_template = str_replace("[/xfgiven_{$value[0]}]", "", $tpl->copy_template);
}
$xfieldsdata[$value[0]] = stripslashes($xfieldsdata[$value[0]]);
$tpl->copy_template = str_replace("[xfvalue_{$value[0]}]", $xfieldsdata[$value[0]], $tpl->copy_template);
if (preg_match("#\\[xfvalue_{$preg_safe_name} limit=['\"](.+?)['\"]\\]#i", $tpl->copy_template, $matches)) {
$count = intval($matches[1]);
$xfieldsdata[$value[0]] = str_replace("</p><p>", " ", $xfieldsdata[$value[0]]);
$xfieldsdata[$value[0]] = strip_tags($xfieldsdata[$value[0]], "<br>");
$xfieldsdata[$value[0]] = trim(str_replace("<br>", " ", str_replace("<br />", " ", str_replace("\n", " ", str_replace("\r", "", $xfieldsdata[$value[0]])))));
if ($count AND dle_strlen($xfieldsdata[$value[0]], $config['charset']) > $count) {
$xfieldsdata[$value[0]] = dle_substr($xfieldsdata[$value[0]], 0, $count, $config['charset']);
if (($temp_dmax = dle_strrpos($xfieldsdata[$value[0]], ' ', $config['charset']))) {
$xfieldsdata[$value[0]] = dle_substr($xfieldsdata[$value[0]], 0, $temp_dmax, $config['charset']);
}
}
$tpl->set($matches[0], $xfieldsdata[$value[0]]);
}
}
# Rating
if ($news['allow_rate']) {
if ($config['short_rating'] and $user_group[$member_id['user_group']]['allow_rating']) {
$tpl->set('{rating}', ShowRating($news['id'], $news['rating'], $news['vote_num'], 1));
} else {
$tpl->set('{rating}', ShowRating($news['id'], $news['rating'], $news['vote_num'], 0));
}
$tpl->set('{vote-num}', "<span id=\"vote-num-id-" . $news['id'] . "\">" . $news['vote_num'] . "</span>");
$tpl->set('{rate}', str_replace(",", ".", round($news['rating'] / max(1, $news['vote_num']), 1)));
$tpl->set('[rating]', "");
$tpl->set('[/rating]', "");
} else {
$tpl->set('{rating}', "");
$tpl->set('{vote-num}', "");
$tpl->set_block("'\\[rating\\](.*?)\\[/rating\\]'si", "");
}
$tpl->compile('content');
$tpl->result['content'] = str_ireplace('{THEME}', $config['http_home_url'] . 'templates/' . $config['skin'], $tpl->result['content']);
$ajaxView = $tpl->result['content'];
create_cache('news', $ajaxView, 'ajax_view_' . $news_id . $config['skin'], true);
}
@header("Content-type: text/html; charset=" . $config['charset']);
echo $ajaxView;