issue 70 file module UX changed

document module develope for document management


git-svn-id: http://xe-core.googlecode.com/svn/branches/1.5.0@8679 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
ovclas 2011-07-28 05:09:38 +00:00
parent 99d36039e9
commit aadeda4f55
23 changed files with 444 additions and 261 deletions

View file

@ -3,7 +3,7 @@
<grants />
<permissions />
<actions>
<action name="dispFileAdminList" type="view" admin_index="true" standalone="true" />
<action name="dispFileAdminList" type="view" admin_index="true" standalone="true" menu_name="file" menu_index="true" />
<action name="dispFileAdminConfig" type="view" standalone="true" />
<action name="getFileList" type="model" standalone="true" />
<action name="procFileUpload" type="controller" standalone="true" />

View file

@ -17,6 +17,48 @@
* @brief Get all the attachments in order by time descending (for administrators)
**/
function getFileList($obj, $columnList = array()) {
$this->_makeSearchParam($obj, $args);
// Set valid/invalid state
if($obj->isvalid == 'Y') $args->isvalid = 'Y';
elseif($obj->isvalid == 'N') $args->isvalid = 'N';
// Set multimedia/common file
if($obj->direct_download == 'Y') $args->direct_download = 'Y';
elseif($obj->direct_download == 'N') $args->direct_download= 'N';
// Set variables
$args->sort_index = $obj->sort_index;
$args->page = $obj->page?$obj->page:1;
$args->list_count = $obj->list_count?$obj->list_count:20;
$args->page_count = $obj->page_count?$obj->page_count:10;
$args->s_module_srl = $obj->module_srl;
$args->exclude_module_srl = $obj->exclude_module_srl;
// Execute the file.getFileList query
$output = executeQuery('file.getFileList', $args, $columnList);
// Return if no result or an error occurs
if(!$output->toBool()||!count($output->data)) return $output;
$oFileModel = &getModel('file');
foreach($output->data as $key => $file) {
$file->download_url = $oFileModel->getDownloadUrl($file->file_srl, $file->sid);
$output->data[$key] = $file;
}
return $output;
}
/**
* @brief Return number of attachments which belongs to a specific document
**/
function getFilesCountByGroupValid($obj) {
$this->_makeSearchParam($obj, $args);
$output = executeQueryArray('file.getFilesCountByGroupValid', $args);
return $output->data;
}
function _makeSearchParam(&$obj, &$args)
{
// Search options
$search_target = $obj->search_target?$obj->search_target:trim(Context::get('search_target'));
$search_keyword = $obj->search_keyword?$obj->search_keyword:trim(Context::get('search_keyword'));
@ -57,35 +99,11 @@
case 'nick_name' :
$args->s_nick_name = $search_keyword;
break;
case 'isvalid' :
$args->isvalid = $search_keyword;
break;
}
}
// Set valid/invalid state
if($obj->isvalid == 'Y') $args->isvalid = 'Y';
elseif($obj->isvalid == 'N') $args->isvalid = 'N';
// Set multimedia/common file
if($obj->direct_download == 'Y') $args->direct_download = 'Y';
elseif($obj->direct_download == 'N') $args->direct_download= 'N';
// Set variables
$args->sort_index = $obj->sort_index;
$args->page = $obj->page?$obj->page:1;
$args->list_count = $obj->list_count?$obj->list_count:20;
$args->page_count = $obj->page_count?$obj->page_count:10;
$args->s_module_srl = $obj->module_srl;
$args->exclude_module_srl = $obj->exclude_module_srl;
// Execute the file.getFileList query
$output = executeQuery('file.getFileList', $args, $columnList);
// Return if no result or an error occurs
if(!$output->toBool()||!count($output->data)) return $output;
$oFileModel = &getModel('file');
foreach($output->data as $key => $file) {
$file->download_url = $oFileModel->getDownloadUrl($file->file_srl, $file->sid);
$output->data[$key] = $file;
}
return $output;
}
}
}
?>

View file

@ -26,10 +26,10 @@
$args->isvalid = Context::get('isvalid');
$args->module_srl = Context::get('module_srl');
// Get a list
$oFileModel = &getAdminModel('file');
$oFileAdminModel = &getAdminModel('file');
$columnList = array('file_srl', 'upload_target_srl', 'upload_target_type', 'module_srl'
, 'source_filename', 'isvalid', 'file_size', 'download_count', 'files.regdate', 'ipaddress');
$output = $oFileModel->getFileList($args, $columnList);
$output = $oFileAdminModel->getFileList($args, $columnList);
// Get the document for looping a list
if($output->data) {
$oCommentModel = &getModel('comment');
@ -154,6 +154,17 @@
}
}
}
$countOutput = $oFileAdminModel->getFilesCountByGroupValid($args);
$validCount = array();
if(is_array($countOutput))
{
foreach($countOutput AS $key=>$value)
{
$validCount[$value->isvalid] = $value->count;
}
}
Context::set('file_list', $file_list);
Context::set('document_list', $document_list);
Context::set('comment_list', $comment_list);
@ -162,6 +173,7 @@
Context::set('total_page', $output->total_page);
Context::set('page', $output->page);
Context::set('page_navigation', $output->page_navigation);
Context::set('valid_count', $validCount);
// Set a template
$this->setTemplatePath($this->module_path.'tpl');
$this->setTemplateFile('file_list');

View file

@ -51,6 +51,7 @@
'user_name' => 'User Name',
'nick_name' => 'Nickname',
'ipaddress' => 'IP Address',
'isvalid' => 'Status',
);
$lang->msg_not_allowed_outlink = 'It is not allowed to download files from sites other than this.';
$lang->msg_not_permitted_create = 'Failed to create a file or directory.';

View file

@ -48,6 +48,7 @@
'nick_name' => 'Apodo',
'regdate' => 'La fecha registrada',
'ipaddress' => 'Dirección IP',
'isvalid' => 'Status',
);
$lang->msg_not_allowed_outlink = 'It is not allowed to download files not from this site.';
$lang->msg_not_permitted_create = '파일 또는 디렉토리를 생성할 수 없습니다.';

View file

@ -48,6 +48,7 @@
'nick_name' => '닉네임',
'regdate' => 'Enrgistre',
'ipaddress' => 'Adresse IP',
'isvalid' => 'Status',
);
$lang->msg_not_allowed_outlink = 'It is not allowed to download files not from this site.';
$lang->msg_not_permitted_create = '파일 또는 디렉토리를 생성할 수 없습니다.';

View file

@ -50,6 +50,7 @@
'nick_name' => 'ニックネーム',
'regdate' => '登録日',
'ipaddress' => 'IPアドレス',
'isvalid' => 'Status',
);
$lang->msg_not_allowed_outlink = '外部リンクからのダウンロードは許可されていません。';
$lang->msg_not_permitted_create = 'ファイルまたはディレクトリを生成できません。';

View file

@ -45,6 +45,7 @@
'nick_name' => '닉네임',
'regdate' => '등록일',
'ipaddress' => 'IP 주소',
'isvalid' => '상태',
);
$lang->msg_not_allowed_outlink = '외부링크에서 다운로드 할 수 없습니다.';
$lang->msg_not_permitted_create = '파일 또는 디렉토리를 생성할 수 없습니다.';

View file

@ -50,6 +50,7 @@
'nick_name' => 'Ник',
'regdate' => 'Дата регистрации',
'ipaddress' => 'IP-Адрес',
'isvalid' => 'Status',
);
$lang->msg_not_allowed_outlink = 'It is not allowed to download files not from this site.';
$lang->msg_not_permitted_create = '파일 또는 디렉토리를 생성할 수 없습니다.';

View file

@ -51,6 +51,7 @@
'user_name' => 'Kullanıcı İsmi',
'nick_name' => 'Rumuz',
'ipaddress' => 'IP Adresi',
'isvalid' => 'Status',
);
$lang->msg_not_allowed_outlink = 'Bu siteden dosya indirimine izin verilmemektedir.';
$lang->msg_not_permitted_create = 'Dosya veya dizin oluşturma hatası.';

View file

@ -54,6 +54,7 @@
'user_name' => 'Tên Sử dụng',
'nick_name' => 'Nickname',
'ipaddress' => 'IP',
'isvalid' => 'Status',
);
$lang->msg_not_allowed_outlink = 'Không cho phép tải file từ những trang khác ngoài trang này.';
$lang->msg_not_permitted_create = '파일 또는 디렉토리를 생성할 수 없습니다.';

View file

@ -48,6 +48,7 @@
'nick_name' => '昵称',
'regdate' => '登录日期',
'ipaddress' => 'IP地址',
'isvalid' => 'Status',
);
$lang->msg_not_allowed_outlink = '此站不允许外链下载。';
$lang->msg_not_permitted_create = '无法生成文件或文件夹。';

View file

@ -50,6 +50,7 @@
'nick_name' => '暱稱',
'regdate' => '登錄日期',
'ipaddress' => 'IP位址',
'isvalid' => 'Status',
);
$lang->msg_not_allowed_outlink = '無法從網站下載檔案。';
$lang->msg_not_permitted_create = '파일 또는 디렉토리를 생성할 수 없습니다.';

View file

@ -0,0 +1,26 @@
<query id="getFilesCount" action="select">
<tables>
<table name="files" />
</tables>
<columns>
<column name="isvalid" />
<column name="count(*)" alias="count" />
</columns>
<conditions>
<condition operation="in" column="module_srl" var="s_module_srl" />
<condition operation="notin" column="module_srl" var="exclude_module_srl" pipe="and" />
<condition operation="equal" column="isvalid" var="isvalid" pipe="and" />
<condition operation="equal" column="direct_download" var="direct_download" pipe="and" />
<group pipe="and">
<condition operation="like" column="source_filename" var="s_filename" pipe="or" />
<condition operation="more" column="file_size" var="s_filesize_more" pipe="or" />
<condition operation="less" column="file_size" var="s_filesize_less" pipe="or" />
<condition operation="more" column="download_count" var="s_download_count" pipe="or" />
<condition operation="like_prefix" column="regdate" var="s_regdate" pipe="or" />
<condition operation="like_prefix" column="ipaddress" var="s_ipaddress" pipe="or" />
</group>
</conditions>
<groups>
<group column="isvalid" />
</groups>
</query>

View file

@ -1,136 +1,189 @@
<!--%import("css/file_list.css")-->
<!--#include("header.html")-->
<!-- 검색 -->
<div class="fl">
<div class="content" id="content">
<div cond="$XE_VALIDATOR_MESSAGE" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
<p>{$XE_VALIDATOR_MESSAGE}</p>
</div>
<form ruleset="deleteChecked" action="./" method="get" class="adminSearch">
<input type="hidden" name="module" value="{$module}" />
<input type="hidden" name="act" value="{$act}" />
<input type="hidden" name="module_srl" value="{$module_srl}" />
<form id="fo_list" action="./" method="post">
<input type="hidden" name="act" value="procFileAdminDeleteChecked" />
<input type="hidden" name="page" value="{$page}" />
<h1 class="h1">File</h1>
<div class="table">
<table width="100%" border="1" cellspacing="0">
<caption>
All({number_format($total_count)})
| <a href="{getUrl('search_target','isvalid','search_keyword','Y')}">{$lang->is_valid}({number_format((int)$valid_count['Y'])})</a>
| <a href="{getUrl('search_target','isvalid','search_keyword','N')}">{$lang->is_stand_by}({number_format((int)$valid_count['N'])})</a>
<span class="side"><span class="btn"><a href="#listManager" class="modalAnchor">선택한 파일 관리...</a></span></span>
</caption>
<thead>
<tr>
<th scope="col" class="text">{$lang->file}</th>
<th scope="col">{$lang->file_size}</th>
<th scope="col">{$lang->cmd_download}</th>
<th scope="col">{$lang->nick_name}</th>
<th scope="col">{$lang->date}</th>
<th scope="col">{$lang->ipaddress}</th>
<th scope="col">{$lang->status}</th>
<th scope="col"><input type="checkbox" data-name="cart" title="Check All" /></th>
</tr>
</thead>
<tfoot>
<tr>
<th scope="col" class="text">{$lang->file}</th>
<th scope="col">{$lang->file_size}</th>
<th scope="col">{$lang->cmd_download}</th>
<th scope="col">{$lang->nick_name}</th>
<th scope="col">{$lang->date}</th>
<th scope="col">{$lang->ipaddress}</th>
<th scope="col">{$lang->status}</th>
<th scope="col"><input type="checkbox" data-name="cart" title="Check All" /></th>
</tr>
</tfoot>
<tbody>
<!--@foreach($file_list as $no => $val)-->
<!-- one document start -->
<!--@if($val->upload_target_srl != $cur_upload_target_srl)-->
<!--@if($val->upload_target_type == 'com')-->
{@ $document_srl = $val->target_document_srl}
{@ $move_uri = getUrl('', 'document_srl', $document_srl).'#comment_'.$val->upload_target_srl}
<!--@elseif($val->upload_target_type == 'doc')-->
{@ $document_srl = $val->upload_target_srl}
{@ $move_uri = getUrl('', 'document_srl', $document_srl)}
<!--@end-->
{@ $cur_upload_target_srl = $val->upload_target_srl}
<tr>
<th colspan="8" class="text" scope="col">
<!--@if(!$val->upload_target_type)-->
<!--@if($val->isvalid=='Y')-->
{$lang->is_valid}
<!--@else-->
{$lang->is_stand_by}
<!--@end-->
<!--@else-->
<!--@if($val->upload_target_type == 'com')-->[{$lang->comment}] <!--@end-->
<!--@if($val->upload_target_type == 'mod')-->[{$lang->module}] <!--@end-->
<fieldset>
<select name="isvalid">
<option value="">{$lang->status}</option>
<option value="Y" <!--@if($isvalid=="Y")-->selected="selected"<!--@end-->>{$lang->is_valid}</option>
<option value="N" <!--@if($isvalid=="N")-->selected="selected"<!--@end-->>{$lang->is_stand_by}</option>
</select>
<!--@if($val->upload_target_type == 'doc' && $document_list[$document_srl] && $document_list[$document_srl]->get('module_srl') == $document_list[$document_srl]->get('member_srl'))-->[{$lang->cmd_temp_save}] <!--@end-->
<!--@if($val->upload_target_type == 'doc' && $document_list[$document_srl] && $document_list[$document_srl]->get('module_srl') == 0)-->[{$lang->cmd_trash}] <!--@end-->
<a href="{getUrl('', 'mid', $module_list[$val->module_srl]->mid)}" target="_blank">{$module_list[$val->module_srl]->browser_title}</a>
<!--@if($document_list[$document_srl] && ($val->upload_target_type == 'doc' || $val->upload_target_type == 'com'))-->
- <!--@if($document_list[$document_srl]->get('module_srl') != $document_list[$document_srl]->get('member_srl'))--><a href="{$move_uri}" target="_blank">{$document_list[$document_srl]->getTitle()}</a><!--@else-->{$document_list[$document_srl]->getTitle()}<!--@end-->
<!--@end-->
<!--@end-->
</th>
</tr>
<!--@endif-->
<!-- one document end -->
<tr>
<td class="text"><a href="{$val->download_url}">{htmlspecialchars($val->source_filename)}</a></td>
<td>{FileHandler::filesize($val->file_size)}</td>
<td>{$val->download_count}</td>
<td>
<!--@if($val->upload_target_type == 'doc' && $document_list[$document_srl])-->
<span class="member_{$document_list[$document_srl]->get('member_srl')}">{$document_list[$document_srl]->getNickName()}</span>
<!--@elseif($val->upload_target_type == 'com' && $comment_list[$val->upload_target_srl])-->
<span class="member_{$comment_list[$val->upload_target_srl]->get('member_srl')}">{$comment_list[$val->upload_target_srl]->getNickName()}</span>
<!--@end-->
</td>
<td>{zdate($val->regdate,"Y-m-d H:i")}</td>
<td><a href="{getUrl('search_target','ipaddress','search_keyword',$val->ipaddress)}">{$val->ipaddress}</a></td>
<td><!--@if($val->isvalid=='Y')-->{$lang->is_valid}<!--@else-->{$lang->is_stand_by}<!--@end--></td>
<td>
<input type="checkbox" name="cart[]" value="{$val->file_srl}" />
</td>
</tr>
<!--@endforeach-->
</tbody>
</table>
</div>
<div class="btnArea">
<span class="btn"><a href="#listManager" class="modalAnchor">선택한 파일 관리...</a></span>
</div>
</form>
<div class="modal" id="listManager">
<form action="" class="fg form">
<h2 class="h2">선택한 파일 관리</h2>
<div class="table">
<table width="100%" border="1" cellspacing="0">
<caption>선택한 파일 <strong>8</strong></caption>
<thead>
<tr>
<th scope="col" class="text">Title/File</th>
<th scope="col">File Size</th>
<th scope="col">Author</th>
<th scope="col">Status</th>
<th scope="col">
<input type="checkbox" checked="checked" title="Check All" />
</th>
</tr>
</thead>
<tbody>
<tr>
<th colspan="5" class="text" scope="col"> The quick brown fox jumps over the lazy dog.
</td>
</th>
</tr>
<tr>
<td class="text">489d9886e52ea5227a8edb74dcc8124e.jpg</td>
<td>123.4KB</td>
<td>정찬명</td>
<td>Valid</td>
<td>
<input type="checkbox" checked="checked" />
</td>
</tr>
<tr>
<th colspan="5" class="text" scope="col"> The quick brown fox jumps over the lazy dog.
</td>
</th>
</tr>
<tr>
<td class="text">attendance_1.5.19.tar.gz</td>
<td>456Byte</td>
<td>김태곤</td>
<td>Standby</td>
<td>
<input type="checkbox" checked="checked" />
</td>
</tr>
<tr>
<td class="text">attendance_1.5.19.tar.gz</td>
<td>456Byte</td>
<td>김태곤</td>
<td>Standby</td>
<td>
<input type="checkbox" checked="checked" />
</td>
</tr>
</tbody>
</table>
</div>
<p class="q">선택한 파일의 상태를 변경.</p>
<p>
<input type="radio" name="status" id="valid" /> <label for="valid">Valid</label>
<input type="radio" name="status" id="standby" /> <label for="standby">Standby</label>
</p>
<div class="btnArea">
<span class="btn"><input type="submit" value="Modify" /></span>
<span class="btn"><input type="submit" value="Trash" /></span>
<span class="btn"><input type="submit" value="Delete" class="delete" /></span>
</div>
</form>
</div>
<div class="search">
<!-- page navigation -->
<form action="./" method="get">
<input type="hidden" name="module" value="{$module}" />
<input type="hidden" name="act" value="{$act}" />
<input type="hidden" name="module_srl" value="{$module_srl}" />
<select name="search_target">
<option value="">{$lang->search_target}</option>
<!--@foreach($lang->file_search_target_list as $key => $val)-->
<option value="{$key}" <!--@if($search_target==$key)-->selected="selected"<!--@end-->>{$val}</option>
<!--@end-->
</select>
<input type="text" name="search_keyword" value="{htmlspecialchars($search_keyword)}" class="inputTypeText" />
<span class="button blue"><input type="submit" value="{$lang->cmd_search}" /></span>
<a href="{getUrl('','module',$module,'act',$act)}" class="button black"><span>{$lang->cmd_cancel}</span></a>
</fieldset>
</form>
<input type="text" name="search_keyword" value="{htmlspecialchars($search_keyword)}" />
<input type="submit" value="{$lang->cmd_search}" />
<a href="#">Cancel</a>
</form>
</div>
</div>
<form id="fo_list" action="./" method="post">
<input type="hidden" name="act" value="procFileAdminDeleteChecked" />
<input type="hidden" name="page" value="{$page}" />
<!-- 모듈 선택 -->
<div class="fr">
<a href="{getUrl('','module','module','act','dispModuleSelectList','id','target_module','type','single')}" onclick="popopen(this.href,'ModuleSelect');return false;" class="button green"><span>{$lang->cmd_find_module}</span></a>
<span class="button red"><input type="submit" value="{$lang->cmd_delete_checked_file}" /></span>
</div>
<!-- 목록 -->
<table cellspacing="0" class="crossTable clear">
<caption>Total {number_format($total_count)}, Page {number_format($page)}/{number_format($total_page)}</caption>
<thead>
<tr>
<th scope="col"><div>{$lang->no}</div></th>
<th scope="col"><div><input type="checkbox" onclick="XE.checkboxToggleAll(); return false;" /></div></th>
<th scope="col" class="wide"><div>{$lang->file}</div></th>
<th scope="col"><div>{$lang->file_size}</div></th>
<th scope="col"><div>{$lang->status}</div></th>
<th scope="col"><div>{$lang->cmd_download}</div></th>
<th scope="col"><div>{$lang->date}</div></th>
<th scope="col"><div>{$lang->ipaddress}</div></th>
<th scope="col"><div>{$lang->nick_name}</div></th>
</tr>
</thead>
<tbody>
<!--@foreach($file_list as $no => $val)-->
<!--@if($val->upload_target_srl != $cur_upload_target_srl)-->
<!--@if($val->upload_target_type == 'com')-->
{@ $document_srl = $val->target_document_srl}
{@ $move_uri = getUrl('', 'document_srl', $document_srl).'#comment_'.$val->upload_target_srl}
<!--@elseif($val->upload_target_type == 'doc')-->
{@ $document_srl = $val->upload_target_srl}
{@ $move_uri = getUrl('', 'document_srl', $document_srl)}
<!--@end-->
{@ $cur_upload_target_srl = $val->upload_target_srl}
<tr class="row{$cycle_idx} bg1">
<th colspan="9">
<!--@if(!$val->upload_target_type)-->
<!--@if($val->isvalid=='Y')-->
{$lang->is_valid}
<!--@else-->
{$lang->is_stand_by}
<!--@end-->
<!--@else-->
<!--@if($val->upload_target_type == 'com')-->[{$lang->comment}] <!--@end-->
<!--@if($val->upload_target_type == 'mod')-->[{$lang->module}] <!--@end-->
<!--@if($val->upload_target_type == 'doc' && $document_list[$document_srl] && $document_list[$document_srl]->get('module_srl') == $document_list[$document_srl]->get('member_srl'))-->[{$lang->cmd_temp_save}] <!--@end-->
<!--@if($val->upload_target_type == 'doc' && $document_list[$document_srl] && $document_list[$document_srl]->get('module_srl') == 0)-->[{$lang->cmd_trash}] <!--@end-->
<a href="{getUrl('', 'mid', $module_list[$val->module_srl]->mid)}" onclick="window.open(this.href);return false;">{$module_list[$val->module_srl]->browser_title}</a>
<!--@if($document_list[$document_srl] && ($val->upload_target_type == 'doc' || $val->upload_target_type == 'com'))-->
- <!--@if($document_list[$document_srl]->get('module_srl') != $document_list[$document_srl]->get('member_srl'))--><a href="{$move_uri}" onclick="window.open(this.href);return false;">{$document_list[$document_srl]->getTitle()}</a><!--@else-->{$document_list[$document_srl]->getTitle()}<!--@end-->
<!--@end-->
<!--@end-->
</th>
</tr>
<!--@endif-->
<tr>
<td class="tCenter number">{$no}</td>
<td class="tCenter"><input type="checkbox" name="cart[]" value="{$val->file_srl}" /></td>
<td class="wide"><a href="{$val->download_url}" class="red">{htmlspecialchars($val->source_filename)}</a></td>
<td class="number tRight">{FileHandler::filesize($val->file_size)}</td>
<td class="tCenter">
<!--@if($val->isvalid=='Y')-->
{$lang->is_valid}
<!--@else-->
{$lang->is_stand_by}
<!--@end-->
</td>
<td class="number tCenter">{$val->download_count}</td>
<td class="date tCenter nowrap" title="{zdate($val->regdate,"Y-m-d H:i:s")}">{zdate($val->regdate,"Y-m-d")}</td>
<td class="number tCenter nowrap"><a href="{getUrl('search_target','ipaddress','search_keyword',$val->ipaddress)}">{$val->ipaddress}</a></td>
<td class="nowrap">
<!--@if($val->upload_target_type == 'doc' && $document_list[$document_srl])-->
<span class="member_{$document_list[$document_srl]->get('member_srl')}">{$document_list[$document_srl]->getNickName()}</span>
<!--@elseif($val->upload_target_type == 'com' && $comment_list[$val->upload_target_srl])-->
<span class="member_{$comment_list[$val->upload_target_srl]->get('member_srl')}">{$comment_list[$val->upload_target_srl]->getNickName()}</span>
<!--@end-->
</td>
</tr>
<!--@endforeach-->
</tbody>
</table>
</form>
<!-- 페이지 네비게이션 -->
<div class="pagination a1">
<a href="{getUrl('page','')}" class="prevEnd">{$lang->first_page}</a>
<!--@while($page_no = $page_navigation->getNextPage())-->
<!--@if($page == $page_no)-->
<strong>{$page_no}</strong>
<!--@else-->
<a href="{getUrl('page',$page_no)}">{$page_no}</a>
<!--@end-->
<!--@end-->
<a href="{getUrl('page',$page_navigation->last_page)}" class="nextEnd">{$lang->last_page}</a>
</div>