Vì nhiều lý do, module news hiện tại chưa cho phép tải hình minh họa khi đăng tin tại khu vực giành cho thành viên site. Hướng dẫn này giúp bạn bổ sung tính năng này nếu có nhu cầu
Với thay đổi này, khu vực đăng tin của thành viên sẽ được trang bị thêm nút "Chọn hình minh họa". Ảnh sau khi upload sẽ được lưu vào thư mục uploads đúng theo cấu hình module news.

Sửa modules/news/funcs/content.php
Tìm và xóa (khoảng dòng 265)
// Xu ly anh minh hoa
$rowcontent['homeimgthumb'] = 0;
if (! nv_is_url($rowcontent['homeimgfile']) and nv_is_file($rowcontent['homeimgfile'], NV_UPLOADS_DIR . '/' . $module_upload)) {
$lu = strlen(NV_BASE_SITEURL . NV_UPLOADS_DIR . '/' . $module_upload . '/');
$rowcontent['homeimgfile'] = substr($rowcontent['homeimgfile'], $lu);
if (is_file(NV_ROOTDIR . '/' . NV_FILES_DIR . '/' . $module_upload . '/' . $rowcontent['homeimgfile'])) {
$rowcontent['homeimgthumb'] = 1;
} else {
$rowcontent['homeimgthumb'] = 2;
}
} elseif (nv_is_url($rowcontent['homeimgfile'])) {
$rowcontent['homeimgthumb'] = 3;
} else {
$rowcontent['homeimgfile'] = '';
}
Tìm
if ($rowcontent['id'] == 0) {
Thêm bên trên
$fileupload = '';
if (isset($_FILES['upload_fileupload']) and is_uploaded_file($_FILES['upload_fileupload']['tmp_name'])) {
$username_alias = defined('NV_IS_USER') ? change_alias($user_info['username']) : 'guest';
$array_structure_image = array();
$array_structure_image[''] = $module_upload;
$array_structure_image['Y'] = $module_upload . '/' . date('Y');
$array_structure_image['Ym'] = $module_upload . '/' . date('Y_m');
$array_structure_image['Y_m'] = $module_upload . '/' . date('Y/m');
$array_structure_image['Ym_d'] = $module_upload . '/' . date('Y_m/d');
$array_structure_image['Y_m_d'] = $module_upload . '/' . date('Y/m/d');
$array_structure_image['username'] = $module_upload . '/' . $username_alias;
$array_structure_image['username_Y'] = $module_upload . '/' . $username_alias . '/' . date('Y');
$array_structure_image['username_Ym'] = $module_upload . '/' . $username_alias . '/' . date('Y_m');
$array_structure_image['username_Y_m'] = $module_upload . '/' . $username_alias . '/' . date('Y/m');
$array_structure_image['username_Ym_d'] = $module_upload . '/' . $username_alias . '/' . date('Y_m/d');
$array_structure_image['username_Y_m_d'] = $module_upload . '/' . $username_alias . '/' . date('Y/m/d');
$structure_upload = isset($module_config[$module_name]['structure_upload']) ? $module_config[$module_name]['structure_upload'] : 'Ym';
$currentpath = isset($array_structure_image[$structure_upload]) ? $array_structure_image[$structure_upload] : '';
if (file_exists(NV_UPLOADS_REAL_DIR . '/' . $currentpath)) {
$upload_real_dir_page = NV_UPLOADS_REAL_DIR . '/' . $currentpath;
} else {
$upload_real_dir_page = NV_UPLOADS_REAL_DIR . '/' . $module_upload;
$e = explode('/', $currentpath);
if (!empty($e)) {
$cp = '';
foreach ($e as $p) {
if (!empty($p) and !is_dir(NV_UPLOADS_REAL_DIR . '/' . $cp . $p)) {
$mk = nv_mkdir(NV_UPLOADS_REAL_DIR . '/' . $cp, $p);
if ($mk[0] > 0) {
$upload_real_dir_page = $mk[2];
try {
$db->query("INSERT INTO " . NV_UPLOAD_GLOBALTABLE . "_dir (dirname, time) VALUES ('" . NV_UPLOADS_DIR . "/" . $cp . $p . "', 0)");
} catch (PDOException $e) {
trigger_error($e->getMessage());
}
}
} elseif (!empty($p)) {
$upload_real_dir_page = NV_UPLOADS_REAL_DIR . '/' . $cp . $p;
}
$cp .= $p . '/';
}
}
$upload_real_dir_page = str_replace('\\', '/', $upload_real_dir_page);
}
$currentpath = str_replace(NV_ROOTDIR . '/', '', $upload_real_dir_page);
$uploads_dir_user = NV_UPLOADS_DIR . '/' . $module_upload;
if (!defined('NV_IS_SPADMIN') and strpos($structure_upload, 'username') !== false) {
$array_currentpath = explode('/', $currentpath);
if ($array_currentpath[2] == $username_alias) {
$uploads_dir_user = NV_UPLOADS_DIR . '/' . $module_upload . '/' . $username_alias;
}
}
$upload = new NukeViet\Files\Upload(array('images'), $global_config['forbid_extensions'], $global_config['forbid_mimes'], $global_config['nv_max_size'], NV_MAX_WIDTH, NV_MAX_HEIGHT);
$upload_info = $upload->save_file($_FILES['upload_fileupload'], NV_ROOTDIR . '/' . $currentpath, false);
@unlink($_FILES['upload_fileupload']['tmp_name']);
if (empty($upload_info['error'])) {
mt_srand((double) microtime() * 1000000);
$maxran = 1000000;
$random_num = mt_rand(0, $maxran);
$random_num = md5($random_num);
$nv_pathinfo_filename = nv_pathinfo_filename($upload_info['name']);
$new_name = NV_ROOTDIR . '/' . $currentpath . '/' . $nv_pathinfo_filename . '.' . $random_num . '.' . $upload_info['ext'];
$rename = nv_renamefile($upload_info['name'], $new_name);
if ($rename[0] == 1) {
$fileupload = $new_name;
} else {
$fileupload = $upload_info['name'];
}
@chmod($fileupload, 0777);
// tạo thumb
nv_create_thumb(str_replace(NV_ROOTDIR . '/', '', $fileupload));
$rowcontent['homeimgfile'] = str_replace(NV_ROOTDIR, '', $fileupload);
} else {
$is_error = true;
$error[] = $upload_info['error'];
}
unset($upload, $upload_info);
}
$rowcontent['homeimgthumb'] = 0;
if (! nv_is_url($rowcontent['homeimgfile']) and nv_is_file($rowcontent['homeimgfile'], NV_UPLOADS_DIR . '/' . $module_upload)) {
$lu = strlen(NV_BASE_SITEURL . NV_UPLOADS_DIR . '/' . $module_upload . '/');
$rowcontent['homeimgfile'] = substr($rowcontent['homeimgfile'], $lu);
if (is_file(NV_ROOTDIR . '/' . NV_FILES_DIR . '/' . $module_upload . '/' . $rowcontent['homeimgfile'])) {
$rowcontent['homeimgthumb'] = 1;
} else {
$rowcontent['homeimgthumb'] = 2;
}
} elseif (nv_is_url($rowcontent['homeimgfile'])) {
$rowcontent['homeimgthumb'] = 3;
} else {
$rowcontent['homeimgfile'] = '';
}
Tìm (khoảng dòng 591)
$rowcontent['homeimgfile'] = NV_BASE_SITEURL . NV_UPLOADS_DIR . '/' . $module_upload . '/' . $rowcontent['homeimgfile'];
Thêm lên trên
if(file_exists(NV_ROOTDIR . '/' . NV_ASSETS_DIR . '/' . $module_upload . '/' . $rowcontent['homeimgfile'])){
$rowcontent['homeimgthumb'] = NV_BASE_SITEURL . NV_ASSETS_DIR . '/' . $module_upload . '/' . $rowcontent['homeimgfile'];
}
Tìm (khoảng dòng 526)
$xtpl->assign('HTMLBODYTEXT', $htmlbodyhtml);
Thêm bên dưới
if(!empty($rowcontent['homeimgthumb'])){
$xtpl->parse('main.homeimgthumb');
}
Sửa modules/news/functions.php
Thêm cuối file
/**
* nv_create_thumb()
*
* @param mixed $fileName
* @return
*
*/
function nv_create_thumb($fileName)
{
global $db;
$array_thumb_config = array();
$sql = 'SELECT * FROM ' . NV_UPLOAD_GLOBALTABLE . '_dir ORDER BY dirname ASC';
$result = $db->query($sql);
while ($row = $result->fetch()) {
$array_dirname[$row['dirname']] = $row['did'];
if ($row['thumb_type']) {
$array_thumb_config[$row['dirname']] = $row;
}
}
unset($array_dirname['']);
if (preg_match('/^' . nv_preg_quote(NV_UPLOADS_DIR) . '\/(([a-z0-9\-\_\/]+\/)*([a-z0-9\-\_\.]+)(\.(gif|jpg|jpeg|png|bmp|ico)))$/i', $fileName, $m)) {
$viewFile = NV_FILES_DIR . '/' . $m[1];
if (file_exists(NV_ROOTDIR . '/' . $viewFile)) {
$size = @getimagesize(NV_ROOTDIR . '/' . $viewFile);
return array(
$viewFile,
$size[0],
$size[1]
);
} else {
$m[2] = rtrim($m[2], '/');
if (isset($array_thumb_config[NV_UPLOADS_DIR . '/' . $m[2]])) {
$thumb_config = $array_thumb_config[NV_UPLOADS_DIR . '/' . $m[2]];
} else {
$thumb_config = $array_thumb_config[''];
$_arr_path = explode('/', NV_UPLOADS_DIR . '/' . $m[2]);
while (sizeof($_arr_path) > 1) {
array_pop($_arr_path);
$_path = implode('/', $_arr_path);
if (isset($array_thumb_config[$_path])) {
$thumb_config = $array_thumb_config[$_path];
break;
}
}
}
$viewDir = NV_FILES_DIR;
if (! empty($m[2])) {
if (! is_dir(NV_ROOTDIR . '/' . $m[2])) {
$e = explode('/', $m[2]);
$cp = NV_FILES_DIR;
foreach ($e as $p) {
if (is_dir(NV_ROOTDIR . '/' . $cp . '/' . $p)) {
$viewDir .= '/' . $p;
} else {
$mk = nv_mkdir(NV_ROOTDIR . '/' . $cp, $p);
if ($mk[0] > 0) {
$viewDir .= '/' . $p;
}
}
$cp .= '/' . $p;
}
}
}
$image = new NukeViet\Files\Image(NV_ROOTDIR . '/' . $fileName, NV_MAX_WIDTH, NV_MAX_HEIGHT);
if ($thumb_config['thumb_type'] == 4) {
$thumb_width = $thumb_config['thumb_width'];
$thumb_height = $thumb_config['thumb_height'];
$maxwh = max($thumb_width, $thumb_height);
if ($image->fileinfo['width'] > $image->fileinfo['height']) {
$thumb_config['thumb_width'] = 0;
$thumb_config['thumb_height'] = $maxwh;
} else {
$thumb_config['thumb_width'] = $maxwh;
$thumb_config['thumb_height'] = 0;
}
}
if ($image->fileinfo['width'] > $thumb_config['thumb_width'] or $image->fileinfo['height'] > $thumb_config['thumb_height']) {
$image->resizeXY($thumb_config['thumb_width'], $thumb_config['thumb_height']);
if ($thumb_config['thumb_type'] == 4) {
$image->cropFromCenter($thumb_width, $thumb_height);
}
$image->save(NV_ROOTDIR . '/' . $viewDir, $m[3] . $m[4], $thumb_config['thumb_quality']);
$create_Image_info = $image->create_Image_info;
$error = $image->error;
$image->close();
if (empty($error)) {
return array(
$viewDir . '/' . basename($create_Image_info['src']),
$create_Image_info['width'],
$create_Image_info['height']
);
}
} elseif (copy(NV_ROOTDIR . '/' . $fileName, NV_ROOTDIR . '/' . $viewDir . '/' . $m[3] . $m[4])) {
$return = array(
$viewDir . '/' . $m[3] . $m[4],
$image->fileinfo['width'],
$image->fileinfo['height']
);
$image->close();
return $return;
} else {
return false;
}
}
} else {
$size = @getimagesize(NV_ROOTDIR . '/' . $fileName);
return array(
$fileName,
$size[0],
$size[1]
);
}
return false;
}
Sửa themes/default/modules/news/content.tpl
Tìm
<form action="{CONTENT_URL}" name="fsea" method="post" id="fsea" class="form-horizontal">
Thay bằng
<form action="{CONTENT_URL}" name="fsea" method="post" id="fsea" class="form-horizontal" enctype="multipart/form-data">
Tìm (khoảng dòng 54)
<div class="form-group">
<label class="col-sm-4 control-label">{LANG.content_homeimg}</label>
<div class="col-sm-20">
<input class="form-control" name="homeimgfile" id="homeimg" value="{DATA.homeimgfile}" type="text" />
</div>
</div>
Thay bằng
<div class="form-group">
<label class="col-sm-4 control-label"><strong>{LANG.content_homeimg}</strong></label>
<div class="col-sm-20">
<div class="input-group">
<input type="text" class="form-control" id="file_name" disabled>
<span class="input-group-btn">
<button class="btn btn-default" onclick="$('#upload_fileupload').click();" type="button">
<em class="fa fa-folder-open-o fa-fix"> </em> {LANG.file_selectfile}
</button> </span>
</div>
<input type="file" name="upload_fileupload" id="upload_fileupload" style="display: none" />
<input type="hidden" name="homeimgfile" value="{DATA.homeimgfile}" />
<!-- BEGIN: homeimgthumb -->
<img style="margin-top: 10px" src="{DATA.homeimgthumb}" class="img-thumbnail" />
<!-- END: homeimgthumb -->
<script type="text/javascript">
$('#upload_fileupload').change(function(){
$('#file_name').val($(this).val().match(/[-_\w]+[.][\w]+$/i)[0]);
});
</script>
</div>
</div>
17-08-2021 09:42
Hướng dẫn thêm ảnh minh họa tại khu vực đăng tin thành viên
Với thay đổi này, khu vực đăng tin của thành viên sẽ được trang bị thêm nút "Chọn hình minh họa". Ảnh sau khi upload sẽ được lưu vào thư mục uploads đúng theo cấu hình module news.

Sửa modules/news/funcs/content.php
Tìm và xóa (khoảng dòng 265)Tìm Thêm bên trên
Tìm (khoảng dòng 591) Thêm lên trên
Tìm (khoảng dòng 526)
Thêm bên dưới
Sửa modules/news/functions.php
Thêm cuối file
Sửa themes/default/modules/news/content.tpl
Tìm
Thay bằng
Tìm (khoảng dòng 54)
Thay bằng
Xếp hạng thành viên
63 điểm - 15 bài viết
21 điểm - 6 bài viết
11 điểm - 0 bài viết
8 điểm - 2 bài viết
6 điểm - 3 bài viết
6 điểm - 1 bài viết
5 điểm - 3 bài viết
5 điểm - 2 bài viết
4 điểm - 1 bài viết
4 điểm - 1 bài viết
Cộng đồng mới nổi
8 Thành viên - 1 Bài viết
4 Thành viên - 0 Bài viết
6 Thành viên - 8 Bài viết
4 Thành viên - 0 Bài viết
6 Thành viên - 1 Bài viết
Cộng đồng cùng chuyên mục
5 Thành viên - Bài viết
6 Thành viên - Bài viết
5 Thành viên - Bài viết
4 Thành viên - Bài viết
4 Thành viên - Bài viết
6 Thành viên - Bài viết
4 Thành viên - Bài viết
4 Thành viên - Bài viết
6 Thành viên - Bài viết
4 Thành viên - Bài viết
Bài viết cùng cộng đồng