Вы не зашли.
ROZARD, ага, согласен! vip, спасибо за пополнение коллекции.
ROZARD, понятно.
С кто онлайн то же трабла, на сайте допустим есть человек, а на форуме его в данный момент нету( либо это кэш
Inferto, в данный момент просто нету времени на бесплатные, если интересует платная, то пиши в личку.
А чей он?
Wolverine, благодарю, уже бегу тестить!
Все работает отлично!
KhadeR, спасибо большое, теперь все что нужно и даже больше!!
Wolverine, сделать вывод в слайдере случайных новостей, вот пример слайдера: http://jetoo.ru/ и что бы взять картинку из новости мне нужны альты категории и новости так как картинки находятся внутри новости и альты у картинок совпадают с альтами новостей, все хитро))
KhadeR, тех которые main.tpl поддерживает, например: {home}, {home_title} и {tpl_url}.
Просто если в блок вставить конструкцию вида: <a href="{home}/" title="{home_title}">{home_title}</a> то потом ничего не преобразуется в ссылку или заголовок, а хотелось бы.
Просто нужно вынести в блоки js некоторые которые в head подключаются, что бы если слайдер допустим рекламный не нужен, просто щелкнул Выключить показ, и готово, но из-за того что {tpl_url} не работает, этого сделать нельзя.(
Wolverine, можешь пожалуйста добавить вот такие переменные: {alt.news},{alt.cat} в entries.tpl?
KhadeR, спасибо огромное! Вопрос, а можешь добавить в блоки обработку переменных? если конечно это не очень сложно.
Neo, на мыло напиши раз уж на то пошло.
vl, есть подозрение что код добавления комментария не соответствует установленной версии плагина комментариев...но это только мое субъективное мнение, попробуй проверить этот момент. Посмотри в свн. Так же проверь шаблон: comments.error.tpl
<div id='error_message' class='error_msg'>
<span style="float:right;" onclick="var x=this.parentNode; x.parentNode.removeChild(x); return false;"><a href="" onclick="return false;"><u>Закрыть</u></a></span>
<br />{content}
</div>
sgreen, согласен, но это уже вопрос к его создателю) я лишь адаптировал все в точности как и было в оригинале.
vl, значит javascript удалил-правил в comments.form.tpl. Смотри внимательнее.
Вот основные элементы comments.form.tpl, сверяйся:
<script type="text/javascript">
var cajax = new sack();
function reload_captcha() {
var captc = document.getElementById('img_captcha');
if (captc != null) {
captc.src = "{captcha_url}?rand="+Math.random();
}
}
function add_comment(){
// First - delete previous error message
var perr;
if (perr=document.getElementById('error_message')) {
perr.parentNode.removeChild(perr);
}
// Now let's call AJAX comments add
var form = document.getElementById('comment');
//cajax.whattodo = 'append';
cajax.onShow("");[not-logged]
cajax.setVar("name", form.name.value);
cajax.setVar("password", form.password.value);
cajax.setVar("mail", form.mail.value);[captcha]
cajax.setVar("vcode", form.vcode.value); [/captcha][/not-logged]
cajax.setVar("content", form.content.value);
cajax.setVar("newsid", form.newsid.value);
cajax.setVar("ajax", "1");
cajax.setVar("json", "1");
cajax.requestFile = "{post_url}"; //+Math.random();
cajax.method = 'POST';
//cajax.element = 'new_comments';
cajax.onComplete = function() {
if (cajax.responseStatus[0] == 200) {
try {
var resRX = eval('('+cajax.response+')');
var nc;
if (resRX['rev'] && document.getElementById('new_comments_rev')) {
nc = document.getElementById('new_comments_rev');
} else {
nc = document.getElementById('new_comments');
}
nc.innerHTML += resRX['data'];
if (resRX['status']) {
// Added successfully!
form.content.value = '';
}
} catch (err) {
alert('Error parsing JSON output. Result: '+cajax.response);
}
} else {
alert('TX.fail: HTTP code '+cajax.responseStatus[0]);
}
[captcha]
reload_captcha();[/captcha]
}
cajax.runAJAX();
}
</script>
<div id="new_comments"></div>
<form id="comment" method="post" action="{post_url}" name="form" [ajax]onsubmit="add_comment(); return false;"[/ajax]>
<input type="hidden" name="newsid" value="{newsid}" />
<input type="hidden" name="referer" value="{request_uri}" />
{l_addcomment}
[not-logged]
{l_name}
<input type="text" size="30" name="name" value="{savedname}" />
{l_password} <small>{l_ifreg}</small>
<input class="password" type="password" maxlength="16" size="30" name="password" value="" />
{l_email} <small>{l_necessary}</small>
<input class="email" type="text" size="30" maxlength="70" name="mail" value="{savedmail}" />
[captcha]
<img id="img_captcha" onclick="reload_captcha();" src="{captcha_url}?rand={rand}" alt="captcha" /><input class="important" type="text" name="vcode" maxlength="5" size="30" />
[/captcha]
[/not-logged]
<a href="javascript:ShowOrHide('bbcodes');">{l_bbcodes}</a><br />
<div id="bbcodes" style="display : none;"><br />{bbcodes}</div>
<a href="javascript:ShowOrHide('smilies');">{l_smilies}</a><br />
<div id="smilies" style="display : none;"><br />{smilies}</div></td>
<textarea name="content" id="content" style="width: 95%;" rows="8"></textarea>
<input type="submit" class="button" value="{l_add}"/> <input type="reset" class="button" value="{l_clear}" />
</form>
Tuan, чего трендеть, возьми и сделай!
sergey777, переноси сайт на NG а потом уже задавай вопросы (так тебе более охотно будут помогать), а то как то странно задавать вопросы по 2z на форуме NG, не замечаешь?
Wolverine, и вправду если вернуть помогает) теперь уж точно все окей)
Wolverine, в полной новости не работает(
Это наверное из-за этого:
if (is_array($userROW) && ($row['author_id'] == $userROW['id'] || $userROW['status'] == "1" || $userROW['status'] == "2")) {
$tvars['vars']['[edit-news]'] = "<a href=\"".admin_url."/admin.php?mod=editnews&action=editnews&id=".$row['id']."\" target=\"_blank\">";
$tvars['vars']['[/edit-news]'] = "</a>";
$tvars['vars']['[del-news]'] = "<a onclick=\"confirmit('".admin_url."/admin.php?mod=editnews&subaction=do_mass_delete&selected_news[]=".$row['id']."', '".$lang['sure_del']."')\" target=\"_blank\" style=\"cursor: pointer;\">";
$tvars['vars']['[/del-news]'] = "</a>";
$tvars['vars']['[if-have-perm]'] = '';
$tvars['vars']['[/if-have-perm]'] = '';
} else {
$tvars['regx']["'\\[edit-news\\].*?\\[/edit-news\\]'si"] = "";
$tvars['regx']["'\\[del-news\\].*?\\[/del-news\\]'si"] = "";
$tvars['regx']['#\[if-have-perm\].*?\[\/if-have-perm\]#si'] = '';
}
exec_acts('news_short', '', $row, &$tvars);
exec_acts('news_short', '', $row, &$tvars);
Wolverine, ага, точно) спасибо, помогло.
Wolverine, вот:
<div class="post-admin">[if-have-perm]<a onclick="confirmit('/engine/admin.php?mod=editnews&subaction=do_mass_delete&selected_news[]={news-id}', 'Вы уверены что хотите удалить эту статью?')" target="_blank" class="postdelete">Удалить</a> <a href="/engine/admin.php?mod=editnews&action=editnews&id={news-id}" target="_blank" class="postedit">Изменить</a>[/if-have-perm] [isplugin bookmarks]{bookmarks}[/isplugin]</div>
Wolverine, не желает падла работать)
Вот код:
<?php
//
// Copyright (C) 2006-2010 Next Generation CMS (http://ngcms.ru/)
// Name: news.php
// Description: News display sub-engine
// Author: Vitaly Ponomarev
//
// Protect against hack attempts
if (!defined('NGCMS')) die ('HAL');
$lang = LoadLang('news', 'site');
$situation = "news";
//
// Show one news
// Params (newsID or alt_name should be filled)
// $newsID - ID of the news
// $alt_name - alt name of the news
// $callingParams
// 'style' => mode for which we're called
// * short - short new display
// * full - full news display
// * export - export data [ for plugins or so on. No counters are updated ]
// * export_body - export ONLY BODY short+full [ for plugins or so on... ]
// * export_short - export ONLY BODY short [ for plugins or so on... ]
// * export_full - export ONLY BODY full [ for plugins or so on... ]
// 'emulate' => array with "fake" emulated row [ used for preview or so ... ]
// 'plugin' => if is called from plugin - ID of plugin
// 'overrideTemplateName' => alternative template for display
// 'overrideTemplatePath' => alternative path for searching of template
// 'customCategoryTemplate' => automatically override custom category templates
// 'setCurrentCategory' => update Current Category in system flags
//
// Returns:
// false - when news is not found
// data - when news is found && export is used
// news row - when news is found
function news_showone($newsID, $alt_name, $callingParams = array()) {
global $mysql, $tpl, $userROW, $catz, $catmap, $config, $template, $parse, $vars, $lang, $SYSTEM_FLAGS, $PFILTERS;
global $timer;
global $year, $month, $day, $SUPRESS_TEMPLATE_SHOW;
if (isset($callingParams['emulate']) && is_array($callingParams['emulate'])) {
$row = $callingParams['emulate'];
$callingParams['emulateMode'] = 1;
} else {
if ($newsID) {
$filter = array('id='.db_squote($newsID));
} elseif ($alt_name) {
$filter = array('alt_name='.db_squote($alt_name));
} else {
return false;
}
if ($year) {
array_push($filter, 'postdate >= '.db_squote(mktime(0,0,0,$month?$month:1, $day?$day:1, $year)));
array_push($filter, 'postdate <= '.db_squote(mktime(23,59,59,$month?$month:12, $day?$day:31, $year)));
}
if (!is_array($row = $mysql->record("select * from ".prefix."_news where approve=1".(count($filter)?' and '.implode(" and ",$filter):'')))) {
if (!$params['FFC']) {
error404();
}
return false;
}
// Save some significant news flags for plugin processing
$SYSTEM_FLAGS['news']['db.id'] = $row['id'];
$SYSTEM_FLAGS['news']['db.categories'] = array();
foreach (explode(',', $row['catid']) as $cid) {
if (isset($catmap[$cid]))
array_push($SYSTEM_FLAGS['news']['db.categories'], intval($cid));
}
}
if ($callingParams['setCurrentCategory']) {
// Fetch category ID from news
$cid = intval(array_shift(explode(',', $row['catid'])));
if ($cid && isset($catmap[$cid])) {
// Save current category identifier
$SYSTEM_FLAGS['news']['currentCategory.alt'] = $catz[$catmap[$cid]]['alt'];
$SYSTEM_FLAGS['news']['currentCategory.id'] = $catz[$catmap[$cid]]['id'];
$SYSTEM_FLAGS['news']['currentCategory.name'] = $catz[$catmap[$cid]]['name'];
}
}
// preload plugins
load_extras('news:show');
load_extras('news:show:one');
// Calculate exec time
$tX1 = $timer->stop(4);
// Execute filters
if (is_array($PFILTERS['news']))
foreach ($PFILTERS['news'] as $k => $v) { $v->showNewsPre($row['id'], $row, $callingParams); }
$tX2 = $timer->stop(4);
$tvars = newsFillVariables($row, 1, isset($_REQUEST['page'])?$_REQUEST['page']:0, (substr($callingParams['style'], 0, 6) == 'export')?1:0);
$tX3 = $timer->stop(4);
$timer->registerEvent('call showNewsPre() for [ '.($tX2 - $tX1).' ] sec');
$timer->registerEvent('call newsFillVariables() for [ '.($tX3 - $tX2).' ] sec');
$tvars['vars']['date'] = LangDate(timestamp, $row['postdate']);
$tvars['vars']['views'] = $row['views'];
$tvars['vars']['comnum'] = $row['com'];
// Show icon of `MAIN` category for current news
$masterCatID = intval(array_shift(explode(",", $row['catid'])));
if (!isset($catmap[$masterCatID]))
$masterCatID = 0;
if ($masterCatID && isset($catmap[$masterCatID]) && trim($catz[$catmap[$masterCatID]]['icon'])) {
$tvars['vars']['icon'] = trim($catz[$catmap[$masterCatID]]['icon']);
$tvars['vars']['[icon]'] = '';
$tvars['vars']['[/icon]'] = '';
} else {
$tvars['vars']['icon'] = '';
$tvars['regx']["'\[icon\].*?\[/icon\]'si"] = '';
}
// Show edit/detele news buttons
if (is_array($userROW) && ($row['author_id'] == $userROW['id'] || $userROW['status'] == "1" || $userROW['status'] == "2")) {
$tvars['vars']['[edit-news]'] = "<a href=\"".admin_url."/admin.php?mod=editnews&action=editnews&id=".$row['id']."\" target=\"_blank\">";
$tvars['vars']['[/edit-news]'] = "</a>";
$tvars['vars']['[del-news]'] = "<a onclick=\"confirmit('".admin_url."/admin.php?mod=editnews&subaction=do_mass_delete&selected_news[]=".$row['id']."', '".$lang['sure_del']."')\" target=\"_blank\" style=\"cursor: pointer;\">";
$tvars['vars']['[/del-news]'] = "</a>";
$tvars['vars']['[if-have-perm]'] = '';
$tvars['vars']['[/if-have-perm]'] = '';
} else {
$tvars['regx']["'\\[edit-news\\].*?\\[/edit-news\\]'si"] = "";
$tvars['regx']["'\\[del-news\\].*?\\[/del-news\\]'si"] = "";
$tvars['regx']['#\[if-have-perm\].*?\[\/if-have-perm\]#si'] = '';
}
$newsid = $row['id'];
$allow_comments = $row['allow_com'];
$row['views'] = $row['views']+1;
exec_acts('news_full', '', $row, &$tvars);
// Calculate exec time
$tX1 = $timer->stop(4);
// Execute filters
if (is_array($PFILTERS['news']))
foreach ($PFILTERS['news'] as $k => $v) {
$timer->registerEvent('exec showNews // '.$k);
$v->showNews($row['id'], $row, $tvars, $callingParams);
}
$tX2 = $timer->stop(4);
$timer->registerEvent('call showNews() for [ '.($tX2 - $tX1).' ] sec');
// Check if we need only to export body
if ($callingParams['style'] == 'export_body')
return $tvars['vars']['short-story'].' '.$tvars['vars']['full-story'];
if ($callingParams['style'] == 'export_short')
return $tvars['vars']['short-story'];
if ($callingParams['style'] == 'export_full')
return $tvars['vars']['full-story'];
// Update visits counter if we're not in emulation mode
if ((!$callingParams['emulate'])&&($callingParams['style'] == 'full')&&(intval($_REQUEST['page'])<2))
$mysql->query("update ".prefix."_news set views=views+1 where id = ".db_squote($row['id']));
// Make temlate procession - auto/manual overriding
// -> calling style
if (!$callingParams['style']) $callingParams['style'] = 'full';
// -> desired template - override template if needed
if ($callingParams['overrideTemplateName']) {
$templateName = $callingParams['overrideTemplateName'];
} else {
// -> generate template name for selected style
switch ($callingParams['style']) {
case 'short' : $templateName = 'news.short'; break;
case 'full' : $templateName = 'news.full'; break;
case 'print' : $templateName = 'news.print'; break;
default : $templateName = '';
}
}
// Set default template path
$templatePath = tpl_dir.$config['theme'];
// -> desired template path - override path if needed
if ($callingParams['overrideTemplatePath']) {
$templatePath = $callingParams['overrideTemplatePath'];
} else if ($callingParams['customCategoryTemplate']) {
// -> check for custom category templates
// Find first category
$fcat = array_shift(explode(",", $row['catid']));
// Check if there is a custom mapping
if ($fcat && $catmap[$fcat] && ($ctname = $catz[$catmap[$fcat]]['tpl'])) {
// Check if directory exists
if (is_dir($templatePath.'/ncustom/'.$ctname))
$templatePath = $templatePath.'/ncustom/'.$ctname;
}
}
// Load & configure template
$tpl -> template($templateName, $templatePath);
$tpl -> vars($templateName, $tvars);
// No comments/meta in emulation or export mode
if ((is_array($callingParams['emulate']))||($callingParams['style'] == 'export'))
return $tpl -> show($templateName);
// Set meta tags for news page
$SYSTEM_FLAGS['meta']['description'] = ($row['description'] != '')?$row['description']:$catz[$catmap[$masterCatID]]['description'];
$SYSTEM_FLAGS['meta']['keywords'] = ($row['keywords'] != '')?$row['keywords']:$catz[$catmap[$masterCatID]]['keywords'];
// Prepare title
//$SYSTEM_FLAGS['info']['title']['group'] = $config["category_link"]?GetCategories($row['catid'], true):LangDate(timestamp, $row['postdate']);
$SYSTEM_FLAGS['info']['title']['group'] = GetCategories($row['catid'], true);
$SYSTEM_FLAGS['info']['title']['item'] = secure_html($row['title']);
// We are in short or full mode. Add data into {mainblock}
$template['vars']['mainblock'] .= $tpl -> show($templateName);
return $row;
}
//
// Show news list
// [PROCESS FILTER]
function newsProcessFilter($conditions) {
//print "CALL newsProcessFilter(".var_export($conditions, true).")<br/>\n";
if (!is_array($conditions))
return '';
switch (strtoupper($conditions[0])) {
case 'AND' :
case 'OR' :
$list = array();
for($i = 1; $i < count($conditions); $i++) {
$rec = newsProcessFilter($conditions[$i]);
//print ".result: ".var_export($rec, true)."<br/>\n";
if ($rec != '')
$list []= '('.$rec.')';
}
return join(' '.strtoupper($conditions[0]).' ', $list);
case 'DATA':
if ($conditions[1] == 'category') {
switch ($conditions[2]) {
case '=':
return "`catid` regexp '[[:<:]](".intval($conditions[3]).")[[:>:]]'";
default:
return '';
}
} else {
switch (strtoupper($conditions[2])) {
case '=':
case '>=':
case '<=':
case '>':
case '<':
case 'LIKE':
return '`'.$conditions[1].'` '.$conditions[2].' '.db_squote($conditions[3]);
case 'IN':
if (is_array($conditions[3])) {
$xt = array();
foreach ($conditions[3] as $r)
$xt[]= db_squote($r);
return '`'.$conditions[1].'` IN ('.join(',', $xt).') ';
}
return '';
case 'BETWEEN':
if (is_array($conditions[3])) {
return '`'.$conditions[1].'` BETWEEN '.db_squote($conditions[3][0]).' AND '.db_squote($conditions[3][1]);
}
return '';
}
}
//
break;
case 'SQL' :
return '('.$conditions[1].')';
default: return '';
}
}
// Params (newsID or alt_name should be filled)
// $filterConditions - conditions for filtering
// $paginationParams - config params for page display
// 'pluginName' - name of plugin for call
// 'pluginHandler' - handler for call
// 'params' - standart param list for generateLink() call
// 'xparams' - standart param list for generateLink() call
// 'paginator' - set up for pagination
// [0] - variable name
// [1] - variable location 0 - params / 1 - xparams
// [2] - zero show flag 0 - don't show if zero / 1 - show anytime
// $callingParams
// 'style' => mode for which we're called
// * short - short new display
// * full - full news display
// * export - export data [ for plugins or so on. No counters are updated ]
// 'plugin' => if is called from plugin - ID of plugin
// 'overrideTemplateName' => alternative template for display
// 'overrideTemplatePath' => alternative path for searching of template
// 'customCategoryTemplate' => flag automatically override custom category templates
// [!!!] USES CUSTOM TEMPLATE FOR FIRST CATEGORY FROM NEWS [!!!]
// 'regenShortNews' =>
// 'mode' => If we should generate `on the fly` short news from long one
// * '' - Leave short news as is [ default ]
// * 'auto' - Generate ShortNews from long only if ShortNews is empty
// * 'force' - Generate ShortNews from long in any case
// 'len' => Length in chars of part of LongNews that will be used for regeneration (in case if regeneration is active)
// 'finisher' => chars that will be added into the end to indicate that this is truncated line ( default = '...' )
// 'showNumber' => set number of news to show per page
// 'newsOrder' => set news order
// 'overrideSQLquery' => array - sets if PLUGIN wants to run it's own query
// 'page' => page number to show
// 'extendedReturn' => flag if we need to return an extended array:
// 'count' - count of found news
// 'data' - data to be showed
// 'searchFlag' => flag if we want to use non-mondatory template 'news.search.tpl' [!!only for style = 'short' !!]
//
function news_showlist($filterConditions = array(), $paginationParams = array(), $callingParams = array()){
global $mysql, $tpl, $userROW, $catz, $catmap, $config, $vars, $parse, $template, $lang, $PFILTERS;
global $year, $month, $day;
global $timer;
global $SYSTEM_FLAGS, $TemplateCache;
$categoryList = array();
// Generate SQL filter for 'WHERE' using filterConditions parameter
$query['filter'] = newsProcessFilter(array('AND', array('DATA', 'approve', '=', '1'), $filterConditions));
//print "<pre>".var_export($filterConditions, true)."</pre>";
//print "<pre>".$query['filter']."</pre>";
// Make temlate procession - auto/manual overriding
// -> calling style
if (!$callingParams['style']) $callingParams['style'] = 'short';
// -> desired template - override template if needed
if (isset($callingParams['overrideTemplateName']) && $callingParams['overrideTemplateName']) {
$templateName = $callingParams['overrideTemplateName'];
} else {
// -> generate template name for selected style
switch ($callingParams['style']) {
case 'short': $templateName = 'news.short'; break;
case 'full' : $templateName = 'news.full'; break;
default : $templateName = '';
}
}
// Set default template path
$templatePath = tpl_dir.$config['theme'];
$cstart = $start_from = intval($callingParams['page']);
if ($cstart < 1) { $cstart = 1; }
$i = $start_from?$start_from:0;
$showNumber = ($config['number']>=1)?$config['number']:5;
if (isset($callingParams['showNumber']) && (intval($callingParams['showNumber'])>0))
$showNumber = intval($callingParams['showNumber']);
$limit_start = $cstart?($cstart-1)*$showNumber:0;
$limit_count = $showNumber;
$orderBy = isset($callingParams['newsOrder'])?$callingParams['newsOrder']:'id desc';
if (!in_array($orderBy, array('id desc', 'id asc', 'postdate desc', 'postdate asc', 'title desc', 'title asc')))
$orderBy = 'id desc';
$orderBy = 'pinned desc, '.$orderBy;
$query['orderby'] = " order by ".$orderBy." limit ".$limit_start.",".$limit_count;
// ===================================================================
$query['count'] = "SELECT count(*) as count FROM ".prefix."_news WHERE ".$query['filter'];
$query['result'] = "SELECT * FROM ".prefix."_news WHERE ".$query['filter'].$query['orderby'];
// preload plugins
load_extras('news:show');
load_extras('news:show:list');
$nCount = 0;
$output = '';
foreach ($mysql->select($query['result']) as $row) {
$i++;
$nCount++;
// Give 'news in order' field to plugins
$callingParams['nCount'] = $nCount;
// Execute filters
if (is_array($PFILTERS['news']))
foreach ($PFILTERS['news'] as $k => $v) { $v->showNewsPre($row['id'], $row, $callingParams); }
$tvars = newsFillVariables($row, 0, isset($_REQUEST['page'])?intval($_REQUEST['page']):0, 0, isset($callingParams['regenShortNews'])?$callingParams['regenShortNews']:array());
$tvars['vars']['alternating'] = ($i%2)?'odd':'even';
$tvars['vars']['date'] = LangDate(timestamp, $row['postdate']);
$tvars['vars']['views'] = $row['views'];
// Print icon if only one parent category
if (isset($row['catid']) && $row['catid'] && !stristr(",", $row['catid']) && isset($catmap[$row['catid']]) && ($catalt = $catmap[$row['catid']]) && isset($catz[$catalt]['icon']) && $catz[$catalt]['icon']) {
$tvars['vars']['icon'] = $catz[$catalt]['icon'];
$tvars['vars']['[icon]'] = '';
$tvars['vars']['[/icon]'] = '';
} else {
$tvars['vars']['icon'] = '';
$tvars['regx']["'\\[icon\\].*?\\[/icon\\]'si"] = '';
}
if (is_array($userROW) && ($userROW['id'] == $row['author_id'] || ($userROW['status'] == 1 || $userROW['status'] == 2))) {
$tvars['vars']['[edit-news]'] = "<a href=\"".admin_url."/admin.php?mod=editnews&action=editnews&id=".$row['id']."\" target=\"_blank\">";
$tvars['vars']['[/edit-news]'] = "</a>";
$tvars['vars']['[del-news]'] = "<a onclick=\"confirmit('".admin_url."/admin.php?mod=editnews&subaction=do_mass_delete&selected_news[]=".$row['id']."', '".$lang['sure_del']."')\" target=\"_blank\" style=\"cursor: pointer;\">";
$tvars['vars']['[/del-news]'] = "</a>";
} else {
$tvars['regx']["'\[edit-news\].*?\[/edit-news\]'si"] = "";
$tvars['regx']["'\[del-news\].*?\[/del-news\]'si"] = "";
}
exec_acts('news_short', '', $row, &$tvars);
// Execute filters
if (is_array($PFILTERS['news'])) {
foreach ($PFILTERS['news'] as $k => $v) { $v->showNews($row['id'], $row, $tvars, $callingParams); }
}
// Set default template path
$templatePath = tpl_dir.$config['theme'];
// -> desired template path - override path if needed
if (isset($callingParams['overrideTemplatePath']) && $callingParams['overrideTemplatePath']) {
$templatePath = $callingParams['overrideTemplatePath'];
} else if (isset($callingParams['customCategoryTemplate']) && $callingParams['customCategoryTemplate']) {
// -> check for custom category templates
// Find first category
$fcat = array_shift(explode(",", $row['catid']));
// Check if there is a custom mapping
if ($fcat && $catmap[$fcat] && ($ctname = $catz[$catmap[$fcat]]['tpl'])) {
// Check if directory exists
if (is_dir($templatePath.'/ncustom/'.$ctname))
$templatePath = $templatePath.'/ncustom/'.$ctname;
}
}
// Hack for 'automatic search mode'
$currentTemplateName = $templateName;
// switch to `search` template if no templateName was overrided AND style is search AND searchFlag is set AND search template file exists
if (isset($callingParams['searchFlag']) && ($callingParams['searchFlag']) && (!isset($callingParams['overrideTemplatePath'])) && ($callingParams['style'] == 'short') && (@file_exists($templatePath.'/news.search.tpl'))) {
$currentTemplateName = 'news.search';
}
$tpl -> template($currentTemplateName, $templatePath);
$tpl -> vars($currentTemplateName, $tvars);
$output .= $tpl -> show($currentTemplateName);
}
unset($tvars);
// Return output if we're in export mode
if ($callingParams['style'] == 'export')
return $output;
// Print "no news" if we didn't find any news [ DON'T PRINT IN EXTENDED MODE ]
if (!$nCount) {
if (!isset($callingParams['extendedReturn']) || !$callingParams['extendedReturn']) {
msg(array("type" => "info", "info" => $lang['msgi_no_news']));
}
$limit_start = 2;
}
// Make navigation bar
templateLoadVariables(true);
$navigations = $TemplateCache['site']['#variables']['navigation'];
$tpl -> template('pages', tpl_dir.$config['theme']);
// Prev page link
if ($limit_start && $nCount) {
$prev = floor($limit_start / $showNumber);
$tvars['regx']["'\[prev-link\](.*?)\[/prev-link\]'si"] = str_replace('%page%',"$1",str_replace('%link%',generatePageLink($paginationParams, $prev), $navigations['prevlink']));
} else {
$tvars['regx']["'\[prev-link\](.*?)\[/prev-link\]'si"] = "";
$prev = 0;
$no_prev = true;
}
// List of pages
$newsCount = $mysql->result($query['count']);
$pages_count = ceil($newsCount / $showNumber);
$maxNavigations = $config['newsNavigationsCount'];
if ($maxNavigations < 1)
$maxNavigations = 10;
$tvars['vars']['pages'] = generatePagination($cstart, 1, $pages_count, $maxNavigations, $paginationParams, $navigations);
// Next page link
if (($prev + 2 <= $pages_count) && $nCount) {
$tvars['regx']["'\[next-link\](.*?)\[/next-link\]'si"] = str_replace('%page%',"$1",str_replace('%link%',generatePageLink($paginationParams, $prev+2), $navigations['nextlink']));
} else {
$tvars['regx']["'\[next-link\](.*?)\[/next-link\]'si"] = "";
$no_next = true;
}
if ($nCount && ($pages_count>1)){
$tpl -> vars('pages', $tvars);
$output .= $tpl -> show('pages');
}
// Add collected news into {mainlock}
return (isset($callingParams['extendedReturn']) && $callingParams['extendedReturn'])?array('count' => $newsCount, 'data' => $output):$output;
}
// ================================================================= //
// Module code //
// ================================================================= //
// Default "show news" function
function showNews($handlerName, $params) {
global $catz, $catmap, $template, $config, $userROW, $PFILTERS, $lang, $SYSTEM_FLAGS, $SUPRESS_TEMPLATE_SHOW, $tpl, $parse;
// preload plugins
load_extras('news');
// Init array with configuration parameters
$callingParams = array('customCategoryTemplate' => 1, 'customCategoryNumber' => 1, 'setCurrentCategory' => 1);
$callingCommentsParams = array();
// Set default template path
$templatePath = tpl_dir.$config['theme'];
// Check for FULL NEWS mode
if (($handlerName == 'news')||($handlerName == 'print')) {
$flagPrint = ($handlerName == 'print')?true:false;
if ($flagPrint)
$SUPRESS_TEMPLATE_SHOW = true;
$callingParams['style'] = $flagPrint?'print':'full';
// Execute filters [ onBeforeShow ] ** ONLY IN 'news' mode. In print mode we don't use it
if (!$flagPrint && is_array($PFILTERS['news'])) {
foreach ($PFILTERS['news'] as $k => $v) { $v->onBeforeShow('full'); }
}
// Determine passed params
$vars = array('id' => 0, 'altname' => '');
if (isset($params['id'])) {
$vars['id'] = $params['id'];
} else if (isset($params['altname'])) {
$vars['altname'] = $params['altname'];
} else if (isset($_REQUEST['id'])) {
$vars['id'] = intval($_REQUEST['id']);
} else {
$vars['altname'] = $_REQUEST['altname'];
}
// Try to show news
if (($row = news_showone($vars['id'], $vars['altname'], $callingParams)) !== false) {
// Execute filters [ onAfterShow ] ** ONLY IN 'news' mode. In print mode we don't use it
if (!$flagPrint && is_array($PFILTERS['news'])) {
foreach ($PFILTERS['news'] as $k => $v) { $v->onAfterNewsShow($row['id'], $row, array('style' => 'full')); }
}
}
} else {
$callingParams['style'] = 'short';
$callingParams['page'] = (isset($params['page']) && intval($params['page']))?intval($params['page']):(isset($_REQUEST['page'])?intval($_REQUEST['page']):0);
// Execute filters [ onBeforeShow ]
if (is_array($PFILTERS['news'])) {
foreach ($PFILTERS['news'] as $k => $v) { $v->onBeforeShow('short'); }
}
switch ($handlerName) {
case 'main':
$SYSTEM_FLAGS['info']['title']['group'] = $lang['mainpage'];
$paginationParams = checkLinkAvailable('news', 'main')?
array('pluginName' => 'news', 'pluginHandler' => 'main', 'params' => array(), 'xparams' => array(), 'paginator' => array('page', 0, false)):
array('pluginName' => 'core', 'pluginHandler' => 'plugin', 'params' => array('plugin' => 'news', 'handler' => 'main'), 'xparams' => array(), 'paginator' => array('page', 1, false));
if ($config['default_newsorder'] != '')
$callingParams['newsOrder'] = $config['default_newsorder'];
$template['vars']['mainblock'] .= news_showlist(array('DATA', 'mainpage', '=', '1'), $paginationParams, $callingParams);
break;
case 'by.category':
$category = '';
if (isset($params['catid'])) {
$category = $params['catid'];
} else if (isset($params['category']) && isset($catz[$params['category']])) {
$category = $catz[$params['category']]['id'];
} else if (isset($_REQUEST['catid'])) {
$category = $params['catid'];
} else if (isset($_REQUEST['category']) && isset($catz[$_REQUEST['category']])) {
$category = $catz[$_REQUEST['category']]['id'];
}
// We can't show unexisted categories
if (!$category || !isset($catmap[$category])) {
if (!$params['FFC']) {
error404();
}
return false;
}
$currentCategory = $catz[$catmap[$category]];
// Save current category identifier
$SYSTEM_FLAGS['news']['currentCategory.alt'] = $currentCategory['alt'];
$SYSTEM_FLAGS['news']['currentCategory.id'] = $currentCategory['id'];
$SYSTEM_FLAGS['news']['currentCategory.name'] = $currentCategory['name'];
// Set title
$SYSTEM_FLAGS['info']['title']['group'] = $currentCategory['name'];
// Set meta tags for category page
if ($currentCategory['description'])
$SYSTEM_FLAGS['meta']['description'] = $currentCategory['description'];
if ($currentCategory['keywords'])
$SYSTEM_FLAGS['meta']['keywords'] = $currentCategory['keywords'];
// Set personal `order by` for category
if ($currentCategory['number'])
$callingParams['showNumber'] = $currentCategory['number'];
// Set number of `news per page` if this parameter is filled in category
if ($currentCategory['orderby'])
$callingParams['newsOrder'] = $currentCategory['orderby'];
$paginationParams = checkLinkAvailable('news', 'by.category')?
array('pluginName' => 'news', 'pluginHandler' => 'by.category', 'params' => array('category' => $catmap[$category]), 'xparams' => array(), 'paginator' => array('page', 0, false)):
array('pluginName' => 'core', 'pluginHandler' => 'plugin', 'params' => array('plugin' => 'news', 'handler' => 'by.category'), 'xparams' => array('category' => $catmap[$category]), 'paginator' => array('page', 1, false));
// Generate news content
$newsContent = news_showlist(array('DATA', 'category', '=', $category), $paginationParams, $callingParams);
// Check if template 'news.table.tpl' exists [first check custom category template (if set), after that - common template for the whole site
$ntTemplatePath = '';
$ntTemplateFound = false;
if ($currentCategory['tpl'] && file_exists(tpl_dir.$config['theme'].'/'.$currentCategory['tpl'].'/news.table.tpl')) {
$ntTemplateFound = true;
$ntTemplatePath = tpl_dir.$config['theme'].'/'.$currentCategory['tpl'];
} else if (file_exists(tpl_dir.$config['theme'].'/news.table.tpl')) {
$ntTemplateFound = true;
$ntTemplatePath = tpl_dir.$config['theme'];
}
if ($ntTemplateFound) {
$tpl->template('news.table', $ntTemplatePath);
$tnvars = array('vars' => array(
'category.id' => $currentCategory['id'],
'category.alt' => secure_html($currentCategory['alt']),
'category.name' => secure_html($currentCategory['name']),
'category.info' => ($config['use_bbcodes'])?$parse -> bbcodes($currentCategory['info']):$currentCategory['info'],
'entries' => $newsContent,
));
if ($currentCategory['image_id'] && $currentCategory['icon_id']) {
$tnvars['regx']['#\[icon\](.*?)\[\/icon\]#is'] = '$1';
$tnvars['vars']['icon.url'] = $config['attach_url'].'/'.$currentCategory['icon_folder'].'/'.$currentCategory['icon_name'];;
$tnvars['vars']['icon.width'] = $row['icon_width'];
$tnvars['vars']['icon.height'] = $row['icon_height'];
if ($currentCategory['icon_preview']) {
$tnvars['regx']['#\[icon\.preview\](.*?)\[\/icon.preview\]#is'] = '$1';
$tnvars['regx']['#\[icon\.nopreview\](.*?)\[\/icon.nopreview\]#is'] = '';
$tnvars['vars']['icon.preview.url'] = $config['attach_url'].'/'.$currentCategory['icon_folder'].'/thumb/'.$currentCategory['icon_name'];;
$tnvars['vars']['icon.preview.width'] = $currentCategory['icon_pwidth'];
$tnvars['vars']['icon.preview.height'] = $currentCategory['icon_pheight'];
} else {
$tnvars['regx']['#\[icon\.preview\](.*?)\[\/icon.preview\]#is'] = '';
$tnvars['regx']['#\[icon\.nopreview\](.*?)\[\/icon.nopreview\]#is'] = '$1';
}
} else {
$tnvars['regx']['#\[icon\](.*?)\[\/icon\]#is'] = '';
$tnvars['regx']['#\[icon\.preview\](.*?)\[\/icon.preview\]#is'] = '';
$tnvars['regx']['#\[icon\.nopreview\](.*?)\[\/icon.nopreview\]#is'] = '';
}
$tpl->vars('news.table', $tnvars);
$template['vars']['mainblock'] .= $tpl->show('news.table');
} else {
$template['vars']['mainblock'] .= $newsContent;
}
break;
case 'by.day':
$year = intval(isset($params['year'])?$params['year']:$_REQUEST['year']);
$month = intval(isset($params['month'])?$params['month']:$_REQUEST['month']);
$day = intval(isset($params['day'])?$params['day']:$_REQUEST['day']);
if (($year < 1970)||($year > 2100)||($month < 1)||($month > 12)||($day < 1)||($day > 31))
return false;
$SYSTEM_FLAGS['info']['title']['group'] = LangDate("j Q Y", mktime("0", "0", "0", $month, $day, $year));
$paginationParams = checkLinkAvailable('news', 'by.day')?
array('pluginName' => 'news', 'pluginHandler' => 'by.day', 'params' => array('day' => sprintf('%02u', $day), 'month' => sprintf('%02u', $month), 'year' => $year), 'xparams' => array(), 'paginator' => array('page', 0, false)):
array('pluginName' => 'core', 'pluginHandler' => 'plugin', 'params' => array('plugin' => 'news', 'handler' => 'by.day'), 'xparams' => array('day' => sprintf('%02u', $day), 'month' => sprintf('%02u', $month), 'year' => $year), 'paginator' => array('page', 1, false));
$template['vars']['mainblock'] .= news_showlist(array('DATA', 'postdate', 'BETWEEN', array(mktime(0,0,0,$month,$day,$year), mktime(23,59,59,$month,$day,$year))), $paginationParams, $callingParams);
break;
case 'by.month':
$year = intval(isset($params['year'])?$params['year']:$_REQUEST['year']);
$month = intval(isset($params['month'])?$params['month']:$_REQUEST['month']);
if (($year < 1970)||($year > 2100)||($month < 1)||($month > 12))
return false;
$SYSTEM_FLAGS['info']['title']['group'] = LangDate("F Y", mktime(0,0,0, $month, 1, $year));
$paginationParams = checkLinkAvailable('news', 'by.month')?
array('pluginName' => 'news', 'pluginHandler' => 'by.month', 'params' => array('month' => sprintf('%02u', $month), 'year' => $year), 'xparams' => array(), 'paginator' => array('page', 0, false)):
array('pluginName' => 'core', 'pluginHandler' => 'plugin', 'params' => array('plugin' => 'news', 'handler' => 'by.month'), 'xparams' => array('month' => sprintf('%02u', $month), 'year' => $year), 'paginator' => array('page', 1, false));
$template['vars']['mainblock'] .= news_showlist(array('DATA', 'postdate', 'BETWEEN', array(mktime(0,0,0,$month,1,$year), mktime(23,59,59,$month,date("t",mktime(0,0,0,$month,1,$year)),$year))), $paginationParams, $callingParams);
break;
case 'by.year':
$year = intval(isset($params['year'])?$params['year']:$_REQUEST['year']);
if (($year < 1970)||($year > 2100))
return false;
$SYSTEM_FLAGS['info']['title']['group'] = LangDate("Y", mktime(0,0,0, 1, 1, $year));
$paginationParams = checkLinkAvailable('news', 'by.year')?
array('pluginName' => 'news', 'pluginHandler' => 'by.year', 'params' => array('year' => $year), 'xparams' => array(), 'paginator' => array('page', 0, false)):
array('pluginName' => 'core', 'pluginHandler' => 'plugin', 'params' => array('plugin' => 'news', 'handler' => 'by.year'), 'xparams' => array('year' => $year), 'paginator' => array('page', 1, false));
$template['vars']['mainblock'] .= news_showlist(array('DATA', 'postdate', 'BETWEEN', array(mktime(0,0,0,1,1,$year), mktime(23,59,59,12,31,$year))), $paginationParams, $callingParams);
break;
}
// Execute filters [ onAfterShow ]
if (is_array($PFILTERS['news'])) {
foreach ($PFILTERS['news'] as $k => $v) { $v->onAfterShow('short'); }
}
}
}
Вроде бы все как ты написал сделал.(
Wolverine, жаль, но за if-have-perm огромное спасибо!
Всем привет, в шаблонах news.short.tpl и news.full.tpl есть обработчики [edit-news] ... [/edit-news] и [del-news] ... [/del-news] они оборачивают объекты внутри себя в ссылки, но у меня возник момент, где нужно использовать не обработчики, а просто переменные с ссылкой на редактирование и удалении. Пример: {del-link} {edit-link}. Можно ли это реализовать? Если да, то очень прошу помочь.
Выглядит все это дело уже сгенерированно вот так:
<a onclick="confirmit('http://sitename.ru/engine/admin.php?mod=editnews&subaction=do_mass_delete&selected_news[]=934', 'Вы уверены что хотите удалить эту статью?')" target="_blank" style="cursor: pointer;">Удалить</a> <a href="http://sitename.ru/engine/admin.php?mod=editnews&action=editnews&id=934" target="_blank">Изменить</a>
Все бы ничего, в принципе можно взять {news-id} и вставить его в шаблон вместе с ссылками, но тогда это будет видно всем, так как закрыть при помощи того же [if-have-perm] нельзя, этот обработчик в шаблонах новостей не поддерживается.
Надеюсь что это реально теперь сделать посредством новых возможностей твига.