สอบถาม event เวลากดติดตามกระทู้

พูดคุย phpBB3, SMF ปัญหา การติดตั้ง ปัญหา การลง Mod การแก้ไข หน้าตาบอร์ด การใช้งาน Joomla 1.5, 1.6, 1.7, 2.5 ,3.x รวมถึง Joomla 4 การใช้งาน wordpress และ CMS อื่นๆ
การตั้งคำถาม ควรระบุรุ่นที่ใช้ ในการตั้งคำตามด้วย นะ เช่น SMF 1.1.4 หรือ SMF2.0, OpenERP, Odoo และ รายละเอียดของ server OS, php เวอร์ชั่นไหน ฐานข้อมูลอะไร

Moderator: mindphp

กฎการใช้บอร์ด
คำถามหมวดนี้ ควรระบุ รายละเอียดของ Server OS, เวอร์ชั่น ของ PHP, CMS ที่ท่านใช้
รวมถึง Hosting หรือ Control Panel Hosting
ภาพประจำตัวสมาชิก
eange08
PHP VIP Members
PHP VIP Members
โพสต์: 14494
ลงทะเบียนเมื่อ: 22/12/2020 10:09 am

สอบถาม event เวลากดติดตามกระทู้

โพสต์ที่ยังไม่ได้อ่าน โดย eange08 »

จะทำนับจำนวนรวมของกระทู้และโพสต์ที่ user ตอนกดติดตามกระทู้ จะต้องใช้ event ไหนค่ะ เพราะลองดูที่ในไฟล์ viewtopic.php ก็จะไปที่ฟังกชั่น watch_topic_forum ซึ่งไม่มี event จะแทรกการทำงานได้ หรือส่วนนี้ใช้เป็น ajax แทนได้ไหมค่ะ
  • ส่วนของปุ่มถ้าสีเหลือติดตาม แต่ถ้าไม่ติดตามก็จะเป็นสีเท่า
    Selection_999(215).png
    Selection_999(215).png (1.3 KiB) Viewed 388 times

    โค้ด: เลือกทั้งหมด

    <a href="./viewtopic.php?uid=2&amp;f=5&amp;t=812&amp;unwatch=topic&amp;start=0&amp;hash=ed87fe7f" class="watch-topic watch-topic-link-812" title="" data-ajax="toggle_link" data-toggle-class="icon fa fa-star-o fa-fw" data-toggle-text="" data-toggle-url="./viewtopic.php?uid=2&amp;f=5&amp;t=812&amp;watch=topic&amp;start=0&amp;hash=ed87fe7f" data-update-all=".watch-topic-link-812" rel="noindex nofollow" alt="ติดตามกระทู้">
            <i class="icon fa fa-star fa-fw" aria-hidden="true">&nbsp;</i>
        </a>
  • ในไฟล์ viewtopic.php ส่วนที่กดติดตาม

    โค้ด: เลือกทั้งหมด

    // Are we watching this topic?
    $s_watching_topic = array(
    	'link'			=> '',
    	'link_toggle'	=> '',
    	'title'			=> '',
    	'title_toggle'	=> '',
    	'is_watching'	=> false,
    );
    
    if ($config['allow_topic_notify'])
    {   echo 'tttt';
    	$notify_status = (isset($topic_data['notify_status'])) ? $topic_data['notify_status'] : null;
    	watch_topic_forum('topic', $s_watching_topic, $user->data['user_id'], $forum_id, $topic_id, $notify_status, $start, $topic_data['topic_title']);
    
    	// Reset forum notification if forum notify is set
    	if ($config['allow_forum_notify'] && $auth->acl_get('f_subscribe', $forum_id))
    	{
    		$s_watching_forum = $s_watching_topic;
    		watch_topic_forum('forum', $s_watching_forum, $user->data['user_id'], $forum_id, 0);
    	}
    }
    Selection_999(216).png
    Selection_999(216).png (10.55 KiB) Viewed 388 times
  • ฟังกชั่น watch_topic_forum ในไฟล์ functions_display.php

    โค้ด: เลือกทั้งหมด

    /**
    * Topic and forum watching common code
    */
    function watch_topic_forum($mode, &$s_watching, $user_id, $forum_id, $topic_id, $notify_status = 'unset', $start = 0, $item_title = '')
    {
    	global $db, $user, $phpEx, $start, $phpbb_root_path;
    	global $request;
    
    	$table_sql = ($mode == 'forum') ? FORUMS_WATCH_TABLE : TOPICS_WATCH_TABLE;
    	$where_sql = ($mode == 'forum') ? 'forum_id' : 'topic_id';
    	$match_id = ($mode == 'forum') ? $forum_id : $topic_id;
    	$u_url = "uid={$user->data['user_id']}";
    	$u_url .= ($mode == 'forum') ? '&amp;f' : '&amp;f=' . $forum_id . '&amp;t';
    	$is_watching = 0;
    
    	// Is user watching this topic?
    	if ($user_id != ANONYMOUS)
    	{
    		$can_watch = true;
    
    		if ($notify_status == 'unset')
    		{
    			$sql = "SELECT notify_status
    				FROM $table_sql
    				WHERE $where_sql = $match_id
    					AND user_id = $user_id";
    			$result = $db->sql_query($sql);
    
    			$notify_status = ($row = $db->sql_fetchrow($result)) ? $row['notify_status'] : NULL;
    			$db->sql_freeresult($result);
    		}
    
    		if (!is_null($notify_status) && $notify_status !== '')
    		{
    			if (isset($_GET['unwatch']))
    			{
    				$uid = $request->variable('uid', 0);
    				$token = $request->variable('hash', '');
    
    				if ($token && check_link_hash($token, "{$mode}_$match_id") || confirm_box(true))
    				{
    					if ($uid != $user_id || $request->variable('unwatch', '', false, \phpbb\request\request_interface::GET) != $mode)
    					{
    						$redirect_url = append_sid("{$phpbb_root_path}view$mode.$phpEx", "$u_url=$match_id&amp;start=$start");
    						$message = $user->lang['ERR_UNWATCHING'];
    
    						if (!$request->is_ajax())
    						{
    							$message .= '<br /><br />' . $user->lang('RETURN_' . strtoupper($mode), '<a href="' . $redirect_url . '">', '</a>');
    						}
    						trigger_error($message);
    					}
    
    					$sql = 'DELETE FROM ' . $table_sql . "
    						WHERE $where_sql = $match_id
    							AND user_id = $user_id";
    					$db->sql_query($sql);
    
    					$redirect_url = append_sid("{$phpbb_root_path}view$mode.$phpEx", "$u_url=$match_id&amp;start=$start");
    					$message = $user->lang['NOT_WATCHING_' . strtoupper($mode)];
    
    					if (!$request->is_ajax())
    					{
    						$message .= '<br /><br />' . $user->lang('RETURN_' . strtoupper($mode), '<a href="' . $redirect_url . '">', '</a>');
    					}
    					meta_refresh(3, $redirect_url);
    					trigger_error($message);
    				}
    				else
    				{
    					$s_hidden_fields = array(
    						'uid'		=> $user->data['user_id'],
    						'unwatch'	=> $mode,
    						'start'		=> $start,
    						'f'			=> $forum_id,
    					);
    					if ($mode != 'forum')
    					{
    						$s_hidden_fields['t'] = $topic_id;
    					}
    
    					if ($item_title == '')
    					{
    						$confirm_box_message = 'UNWATCH_' . strtoupper($mode);
    					}
    					else
    					{
    						$confirm_box_message = $user->lang('UNWATCH_' . strtoupper($mode) . '_DETAILED', $item_title);
    					}
    					confirm_box(false, $confirm_box_message, build_hidden_fields($s_hidden_fields));
    				}
    			}
    			else
    			{
    				$is_watching = true;
    
    				if ($notify_status != NOTIFY_YES)
    				{
    					$sql = 'UPDATE ' . $table_sql . "
    						SET notify_status = " . NOTIFY_YES . "
    						WHERE $where_sql = $match_id
    							AND user_id = $user_id";
    					$db->sql_query($sql);
    				}
    			}
    		}
    		else
    		{
    			if (isset($_GET['watch']))
    			{
    				$uid = $request->variable('uid', 0);
    				$token = $request->variable('hash', '');
    
    				if ($token && check_link_hash($token, "{$mode}_$match_id") || confirm_box(true))
    				{
    					if ($uid != $user_id || $request->variable('watch', '', false, \phpbb\request\request_interface::GET) != $mode)
    					{
    						$redirect_url = append_sid("{$phpbb_root_path}view$mode.$phpEx", "$u_url=$match_id&amp;start=$start");
    						$message = $user->lang['ERR_WATCHING'];
    
    						if (!$request->is_ajax())
    						{
    							$message .= '<br /><br />' . $user->lang('RETURN_' . strtoupper($mode), '<a href="' . $redirect_url . '">', '</a>');
    						}
    						trigger_error($message);
    					}
    
    					$is_watching = true;
    
    					$sql = 'INSERT INTO ' . $table_sql . " (user_id, $where_sql, notify_status)
    						VALUES ($user_id, $match_id, " . NOTIFY_YES . ')';
    					$db->sql_query($sql);
    
    					$redirect_url = append_sid("{$phpbb_root_path}view$mode.$phpEx", "$u_url=$match_id&amp;start=$start");
    					$message = $user->lang['ARE_WATCHING_' . strtoupper($mode)];
    
    					if (!$request->is_ajax())
    					{
    						$message .= '<br /><br />' . $user->lang('RETURN_' . strtoupper($mode), '<a href="' . $redirect_url . '">', '</a>');
    					}
    					meta_refresh(3, $redirect_url);
    					trigger_error($message);
    				}
    				else
    				{
    					$s_hidden_fields = array(
    						'uid'		=> $user->data['user_id'],
    						'watch'		=> $mode,
    						'start'		=> $start,
    						'f'			=> $forum_id,
    					);
    					if ($mode != 'forum')
    					{
    						$s_hidden_fields['t'] = $topic_id;
    					}
    
    					$confirm_box_message = (($item_title == '') ? 'WATCH_' . strtoupper($mode) : $user->lang('WATCH_' . strtoupper($mode) . '_DETAILED', $item_title));
    					confirm_box(false, $confirm_box_message, build_hidden_fields($s_hidden_fields));
    				}
    			}
    			else
    			{
    				$is_watching = 0;
    			}
    		}
    	}
    	else
    	{
    		if ((isset($_GET['unwatch']) && $request->variable('unwatch', '', false, \phpbb\request\request_interface::GET) == $mode) ||
    			(isset($_GET['watch']) && $request->variable('watch', '', false, \phpbb\request\request_interface::GET) == $mode))
    		{
    			login_box();
    		}
    		else
    		{
    			$can_watch = 0;
    			$is_watching = 0;
    		}
    	}
    
    	if ($can_watch)
    	{
    		$s_watching['link'] = append_sid("{$phpbb_root_path}view$mode.$phpEx", "$u_url=$match_id&amp;" . (($is_watching) ? 'unwatch' : 'watch') . "=$mode&amp;start=$start&amp;hash=" . generate_link_hash("{$mode}_$match_id"));
    		$s_watching['link_toggle'] = append_sid("{$phpbb_root_path}view$mode.$phpEx", "$u_url=$match_id&amp;" . ((!$is_watching) ? 'unwatch' : 'watch') . "=$mode&amp;start=$start&amp;hash=" . generate_link_hash("{$mode}_$match_id"));
    		$s_watching['title'] = $user->lang[(($is_watching) ? 'STOP' : 'START') . '_WATCHING_' . strtoupper($mode)];
    		$s_watching['title_toggle'] = $user->lang[((!$is_watching) ? 'STOP' : 'START') . '_WATCHING_' . strtoupper($mode)];
    		$s_watching['is_watching'] = $is_watching;
    	}
    
    	return;
    }
  • Similar Topics
    ตอบกลับ
    แสดง
    โพสต์ล่าสุด

ผู้ใช้งานขณะนี้

สมาชิกกำลังดูบอร์ดนี้: ไม่มีสมาชิกใหม่ และบุคลทั่วไป 4