آخرین ارسالهای انجمن در smf

snoopboys

Member
به نام خدا .
mro2mu7x97zudocadhx3.jpg


امروز برای دوستان آموزش ساخت آخرین ارسالهای انجمن به صورتی که در این تاپیک عنوان شده رو آماده کردم .
ابتدا از دوستان عذر خواهی میکنم ، به خاطر اینکه وقت نداشتم این آموزش رو به صورت بسته و آماده در اختیار دوستان قرار بدم .

آموزش :

برای ساخت آخرین ارسالها به صورتی که در عکس نمایش داده شده به ترتیبی که در زیر عنوان خواهم کرد ، فایلهای قالب خود را ویرایش کنید :

1 - ابتدا فایل Sources/Recent.php را در پوشه ای فروم شما نصب شده را ادیت میکنیم :
پیدا کنید :
کد:
	global $scripturl, $txt, $db_prefix, $user_info, $modSettings, $func;

	// Find all the posts.  Newer ones will have higher IDs.  (assuming the last 20 * number are accessable...)
	// !!!SLOW This query is now slow, NEEDS to be fixed.  Maybe break into two?
	$request = db_query("
		SELECT
			m.posterTime, m.subject, m.ID_TOPIC, m.ID_MEMBER, m.ID_MSG,
			IFNULL(mem.realName, m.posterName) AS posterName, t.ID_BOARD, b.name AS bName,
			LEFT(m.body, 384) AS body, m.smileysEnabled
		FROM ({$db_prefix}messages AS m, {$db_prefix}topics AS t, {$db_prefix}boards AS b)
			LEFT JOIN {$db_prefix}members AS mem ON (mem.ID_MEMBER = m.ID_MEMBER)
		WHERE m.ID_MSG >= " . max(0, $modSettings['maxMsgID'] - 20 * $showlatestcount) . "
			AND t.ID_TOPIC = m.ID_TOPIC
			AND b.ID_BOARD = t.ID_BOARD" . (!empty($modSettings['recycle_enable']) && $modSettings['recycle_board'] > 0 ? "
			AND b.ID_BOARD != $modSettings[recycle_board]" : '') . "
			AND $user_info[query_see_board]
		ORDER BY m.ID_MSG DESC
		LIMIT $showlatestcount", __FILE__, __LINE__);

و جایگزین کنید :
کد:
	global $scripturl, $txt, $db_prefix, $user_info, $modSettings, $func, $settings, $ID_MEMBER;

	// Find all the posts.  Newer ones will have higher IDs.  (assuming the last 20 * number are accessable...)
	// !!!SLOW This query is now slow, NEEDS to be fixed.  Maybe break into two?
	if (!empty($modSettings['recent_topics']) && $modSettings['recent_topics']){
    $request = db_query("
  		SELECT
  			m.posterTime, ms.subject, m.ID_TOPIC, m.ID_MEMBER, m.ID_MSG, b.ID_BOARD, b.name AS bName,
  			IFNULL(mem.realName, m.posterName) AS posterName, " . ($user_info['is_guest'] ? '1 AS isRead, 0 AS new_from' : '
  			IFNULL(lt.ID_MSG, IFNULL(lmr.ID_MSG, 0)) >= m.ID_MSG_MODIFIED AS isRead,
  			IFNULL(lt.ID_MSG, IFNULL(lmr.ID_MSG, -1)) + 1 AS new_from') . ", LEFT(m.body, 384) AS body, m.smileysEnabled, m.icon, t.numReplies, t.numViews
  		FROM ({$db_prefix}messages AS m, {$db_prefix}topics AS t, {$db_prefix}boards AS b, {$db_prefix}messages AS ms)
  			LEFT JOIN {$db_prefix}members AS mem ON (mem.ID_MEMBER = m.ID_MEMBER)" . (!$user_info['is_guest'] ? "
  			LEFT JOIN {$db_prefix}log_topics AS lt ON (lt.ID_TOPIC = t.ID_TOPIC AND lt.ID_MEMBER = $ID_MEMBER)
  			LEFT JOIN {$db_prefix}log_mark_read AS lmr ON (lmr.ID_BOARD = b.ID_BOARD AND lmr.ID_MEMBER = $ID_MEMBER)" : '') . "
  		WHERE t.ID_LAST_MSG >= " . ($modSettings['maxMsgID'] - 35 * min($showlatestcount, 5)) . "
  			AND t.ID_LAST_MSG = m.ID_MSG
  			AND b.ID_BOARD = t.ID_BOARD" . (empty($exclude_boards) ? '' : "
  			AND b.ID_BOARD NOT IN (" . implode(', ', $exclude_boards) . ")") . "
  			AND $user_info[query_see_board]
  			AND ms.ID_MSG = t.ID_FIRST_MSG
  		ORDER BY t.ID_LAST_MSG DESC
  		LIMIT $showlatestcount", __FILE__, __LINE__);
	} else {
      $request = db_query("
    		SELECT
    			m.posterTime, m.subject, m.ID_TOPIC, m.ID_MEMBER, m.ID_MSG,
    			IFNULL(mem.realName, m.posterName) AS posterName, t.ID_BOARD, b.name AS bName,
    			LEFT(m.body, 384) AS body, m.smileysEnabled, m.icon, t.numViews, t.numReplies
    		FROM ({$db_prefix}messages AS m, {$db_prefix}topics AS t, {$db_prefix}boards AS b)
    			LEFT JOIN {$db_prefix}members AS mem ON (mem.ID_MEMBER = m.ID_MEMBER)
    		WHERE m.ID_MSG >= " . max(0, $modSettings['maxMsgID'] - 20 * $showlatestcount) . "
    			AND t.ID_TOPIC = m.ID_TOPIC
    			AND b.ID_BOARD = t.ID_BOARD" . (!empty($modSettings['recycle_enable']) && $modSettings['recycle_board'] > 0 ? "
    			AND b.ID_BOARD != $modSettings[recycle_board]" : '') . "
    			AND $user_info[query_see_board]
    		ORDER BY m.ID_MSG DESC
    		LIMIT $showlatestcount", __FILE__, __LINE__);
	}

پیدا کنید :
کد:
			),
			'topic' => $row['ID_TOPIC'],
و اضافه کنید بعد از آن :
کد:
			'icon' => file_exists($settings['theme_dir'] . '/images/post/' . $row['icon'] . '.gif') ? $settings['images_url'] . '/post/' . $row['icon'] . '.gif' : $settings['default_images_url'] . '/post/' . $row['icon'] . '.gif',
			'views' => $row['numViews'],
			'replies' => $row['numReplies'],
در این قسمت فایل BoardIndex.template.php را ویرایش می کنیم :
(( نکته : توجه داشته باشید این فایل مربوط به قالب شما میشود . یعنی مثلا نام قالب شما "VB" است شما باید فایل Themes/VB/BoardIndex.template.php را ویرایش کنید.))

پیدا کنید :

کد:
						<table cellpadding="0" cellspacing="0" width="100%" border="0">';
و جایگزین کنید :
کد:
						<table cellpadding="0" cellspacing="1" width="100%" border="0">
        	   <tr>
               <td class="catbg2" style="text-align:right;" colspan="2">', $txt[70] ,'</td>
               <td class="catbg2" style="text-align:center;">', $txt[110] ,'</td>
               <td class="catbg2" style="text-align:center;">', $txt[301] ,'</td>
               <td class="catbg2" style="text-align:center;">', $txt[20] ,'</td>
               <td class="catbg2" style="text-align:center;">', $txt[29] ,'</td>
               <td class="catbg2" style="text-align:center;">', $txt[317] ,'</td>
             </tr>';

و مجدد پیدا کنید :
کد:
			foreach ($context['latest_posts'] as $post)
				echo '
							<tr>
								<td class="middletext" valign="top"><b>', $post['link'], '</b> ', $txt[525], ' ', $post['poster']['link'], ' (', $post['board']['link'], ')</td>
								<td class="middletext" align="right" valign="top" nowrap="nowrap">', $post['time'], '</td>
							</tr>';
جایگزین کنید :
کد:
			$cnt = 0;
			foreach ($context['latest_posts'] as $post){
         $cnt++;
         $class = ($cnt % 2) ? 'windowbg' : 'windowbg2';
         
        echo '
							<tr>
                <td class="', $class, '"><img src="', $post['icon'] , '" alt="" /></td>
								<td class="', $class, '"" title="', $post['preview'] ,'">', $post['link'], '</td>
                <td class="', $class, '"" style="text-align:center;">', $post['replies'], '</td>
								<td class="', $class, '"" style="text-align:center;">', $post['views'], '</td>								
                <td class="', $class, '"" style="text-align:center;">',$post['board']['link'], '</td>
                <td class="', $class, '"" style="text-align:center;">',$post['poster']['link'], '</td>
								<td class="', $class, '"" style="text-align:right;" nowrap="nowrap">', $post['time'], '</td>
							</tr>';
       }

در قسمت بعدی فایل Sources/ModSettings.php را ویرایش می کنیم :

پیدا کنید :
کد:
			// Who's online.
			array('check', 'who_enabled'),

اضافه کنید بعد از آن :
کد:
		'',
      // Recent topics ?
      array('check', 'recent_topics',null, &$txt['recent_topics']),


فایل Themes/default/languages/ModSettings.persian.php :

پیدا کنید :

کد:
?>


جایگزین کنید:
کد:
$txt['recent_topics'] = 'Show recent topics instead of recent posts';


کار به پایان رسیده ! تبریک میگم
فقط دوستان توجه داشته باشن باید مقدار "تعداد آخرین ارسال های نمایش داده شده در صفحه اول انجمن ها :" را در قسمت "تنظيمات قالب جاري" حتما به مقدار دلخواه تغییر دهند.
موفق باشید !
اگر سوالی بود در همین تاپیک عنوان کنید.
یاعلی
 

aghahamidgol2

Active Member
خیلی خیلی ممنون درست شد :d
میشه افزودن دکمه ی تشکر رو هم بگید من نتوسنستم
 

azd_mis

New Member
سلام

این کد در فایل BoardIndex.template.php پیدا نکردم :

کد:
 <table cellpadding="0" cellspacing="0" width="100%" border="0">';
 

جدیدترین ارسال ها

بالا