Seite 1 von 1

Smileys global verfügbar machen

Verfasst: 27.02.2009 17:49
von Kerwindena
hallo,
ich bin gerade dabei einen chat in das template meines phpBB3 Systems einzubauen. zu diesem zweck hätte ich es gerna das in diesem feld automatisch die phpBB smyles verwendet würden... mit ner schleife a la <!-- BEGIN smiley --> geht das auf einigen seiten auch ganz gut... problem sind halt nur die seiten wo standartmäßig keine smileys drauf sind... in diesem fall wird die funktion ja nicht aufgerufen.... ich kenn mich zwar gutgenug mit php aus um das problem selbst zu lösen aber in der praxis scheitert es dann daran, dass ich mich zu wenig mit der doch recht komplexen datenstruktur von phpBB. ums kurz zu sagen ist mir noch nicht ganz klar, was ich wo ändern muss damit ich die oben genannte schleife auf jeder seite im template benutzen kann... wäre nett, wenn mir jemand sagt was ich ändern muss, beziehungsweise welche dateien dafür relevant sind.... so such ich mich ja dumm und dämlich...
mfg,
Kerwindena

PS.: ja ich habe Google und die SuFu benutzt^^

Re: Smileys global verfügbar machen

Verfasst: 28.02.2009 00:34
von aurora876
es reicht nicht, das html zu kopieren, das php muß auch mit ;)

Re: Smileys global verfügbar machen

Verfasst: 28.02.2009 11:27
von nickvergessen
Das müsste vermutlich reichen...

Code: Alles auswählen

include($phpbb_root_path . 'includes/functions_posting.' . $phpEx);
$template->assign_vars(array(
	'SMILIES_STATUS'		=> (($config['allow_bbcode'] && $config['allow_smilies']) ? $user->lang['SMILIES_ARE_ON'] : $user->lang['SMILIES_ARE_OFF'],
	'S_SMILIES_ALLOWED'		=> $smilies_status,
));

// Build smilies array
generate_smilies('inline', 0);

Re: Smileys global verfügbar machen

Verfasst: 28.02.2009 11:50
von Kerwindena
so das hilft mir schon ein wenig weiter danke...nur noch 2 sachen:
1. syntaxfehler... hast vergessen eine klammer zuzumachen

Code: Alles auswählen

include($phpbb_root_path . 'includes/functions_posting.' . $phpEx);
$template->assign_vars(array(
   'SMILIES_STATUS'      => (($config['allow_bbcode'] && $config['allow_smilies']) ? $user->lang['SMILIES_ARE_ON'] : $user->lang['SMILIES_ARE_OFF']),
   'S_SMILIES_ALLOWED'      => $smilies_status,
));

// Build smilies array
generate_smilies('inline', 0);
aber das ist net weiter schlimm^^
2. nur wo genau muss ich das einfügen? weil auf jeder einzelnen seite einbinden möchte ich nicht weil ich dann irgendwo es vergesse und es dann doch net überall geht.... in der common.php macht ers aber nicht mehr wenn ich auf die postig seite gehe, weil er dann die funktionen doppelt läd.... common wäre mir aber lieber... weiß denn wer auf welchen seiten die "includes/functions_posting.php" noch includirt wird oder also außer in der posting.php damit ichs dort rauswerfen kann????

mfg,
Kerwindena

Re: Smileys global verfügbar machen

Verfasst: 02.03.2009 15:15
von Kerwindena
so habs jetzt thx an alle, die mir geholfen haben....
so für alle, die wie ich vergeblich nach einer lösung gesucht haben:
  1. neue datei im includes/ ordner anlegen: functions_posting_smileys.XXX (xxx durch dateiendung ersetzen)

    Code: Alles auswählen

    <?php
    /** 
    *
    * @package phpBB3
    * @version $Id: functions_posting.php,v 1.262 2007/07/25 16:06:10 acydburn Exp $
    * @copyright (c) 2005 phpBB Group 
    * @license http://opensource.org/licenses/gpl-license.php GNU Public License 
    *
    */
    
    /**
    * Fill smiley templates (or just the variables) with smilies, either in a window or inline
    */
    function generate_smilies($mode, $forum_id)
    {
    	global $auth, $db, $user, $config, $template;
    	global $phpEx, $phpbb_root_path;
    
    	if ($mode == 'window')
    	{
    		if ($forum_id)
    		{
    			$sql = 'SELECT forum_style
    				FROM ' . FORUMS_TABLE . "
    				WHERE forum_id = $forum_id";
    			$result = $db->sql_query_limit($sql, 1);
    			$row = $db->sql_fetchrow($result);
    			$db->sql_freeresult($result);
    		
    			$user->setup('posting', (int) $row['forum_style']);
    		}
    		else
    		{
    			$user->setup('posting');
    		}
    
    		page_header($user->lang['SMILIES']);
    
    		$template->set_filenames(array(
    			'body' => 'posting_smilies.html')
    		);
    	}
    
    	$display_link = false;
    	if ($mode == 'inline')
    	{
    		$sql = 'SELECT smiley_id
    			FROM ' . SMILIES_TABLE . '
    			WHERE display_on_posting = 0';
    		$result = $db->sql_query_limit($sql, 1, 0, 3600);
    
    		if ($row = $db->sql_fetchrow($result))
    		{
    			$display_link = true;
    		}
    		$db->sql_freeresult($result);
    	}
    
    	$last_url = '';
    
    	$sql = 'SELECT *
    		FROM ' . SMILIES_TABLE . 
    		(($mode == 'inline') ? ' WHERE display_on_posting = 1 ' : '') . '
    		ORDER BY smiley_order';
    	$result = $db->sql_query($sql, 3600);
    
    	$smilies = array();
    	while ($row = $db->sql_fetchrow($result))
    	{
    		if (empty($smilies[$row['smiley_url']]))
    		{
    			$smilies[$row['smiley_url']] = $row;
    		}
    	}
    	$db->sql_freeresult($result);
    
    	if (sizeof($smilies))
    	{
                    $template->destroy_block_vars('smiley');
    		foreach ($smilies as $row)
    		{
    			$template->assign_block_vars('smiley', array(
    				'SMILEY_CODE'	=> $row['code'],
    				'A_SMILEY_CODE'	=> addslashes($row['code']),
    				'SMILEY_IMG'	=> $phpbb_root_path . $config['smilies_path'] . '/' . $row['smiley_url'],
    				'SMILEY_WIDTH'	=> $row['smiley_width'],
    				'SMILEY_HEIGHT'	=> $row['smiley_height'],
    				'SMILEY_DESC'	=> $row['emotion'])
    			);
    		}
    	}
    
    	if ($mode == 'inline' && $display_link)
    	{
    		$template->assign_vars(array(
    			'S_SHOW_SMILEY_LINK' 	=> true,
    			'U_MORE_SMILIES' 		=> append_sid("{$phpbb_root_path}posting.$phpEx", 'mode=smilies&f=' . $forum_id))
    		);
    	}
    
    	if ($mode == 'window')
    	{
    		page_footer();
    	}
    }
    ?>
  2. im includes/ ordner die functions_posting_.XXX die stelle

    Code: Alles auswählen

    /** 
    *
    * @package phpBB3
    * @version $Id: functions_posting.php,v 1.262 2007/07/25 16:06:10 acydburn Exp $
    * @copyright (c) 2005 phpBB Group 
    * @license http://opensource.org/licenses/gpl-license.php GNU Public License 
    *
    */
    
    /**
    * Fill smiley templates (or just the variables) with smilies, either in a window or inline
    */
    function generate_smilies($mode, $forum_id)
    {
    	global $auth, $db, $user, $config, $template;
    	global $phpEx, $phpbb_root_path;
    
    	if ($mode == 'window')
    	{
    		if ($forum_id)
    		{
    			$sql = 'SELECT forum_style
    				FROM ' . FORUMS_TABLE . "
    				WHERE forum_id = $forum_id";
    			$result = $db->sql_query_limit($sql, 1);
    			$row = $db->sql_fetchrow($result);
    			$db->sql_freeresult($result);
    		
    			$user->setup('posting', (int) $row['forum_style']);
    		}
    		else
    		{
    			$user->setup('posting');
    		}
    
    		page_header($user->lang['SMILIES']);
    
    		$template->set_filenames(array(
    			'body' => 'posting_smilies.html')
    		);
    	}
    
    	$display_link = false;
    	if ($mode == 'inline')
    	{
    		$sql = 'SELECT smiley_id
    			FROM ' . SMILIES_TABLE . '
    			WHERE display_on_posting = 0';
    		$result = $db->sql_query_limit($sql, 1, 0, 3600);
    
    		if ($row = $db->sql_fetchrow($result))
    		{
    			$display_link = true;
    		}
    		$db->sql_freeresult($result);
    	}
    
    	$last_url = '';
    
    	$sql = 'SELECT *
    		FROM ' . SMILIES_TABLE . 
    		(($mode == 'inline') ? ' WHERE display_on_posting = 1 ' : '') . '
    		ORDER BY smiley_order';
    	$result = $db->sql_query($sql, 3600);
    
    	$smilies = array();
    	while ($row = $db->sql_fetchrow($result))
    	{
    		if (empty($smilies[$row['smiley_url']]))
    		{
    			$smilies[$row['smiley_url']] = $row;
    		}
    	}
    	$db->sql_freeresult($result);
    
    	if (sizeof($smilies))
    	{
    		foreach ($smilies as $row)
    		{
    			$template->assign_block_vars('smiley', array(
    				'SMILEY_CODE'	=> $row['code'],
    				'A_SMILEY_CODE'	=> addslashes($row['code']),
    				'SMILEY_IMG'	=> $phpbb_root_path . $config['smilies_path'] . '/' . $row['smiley_url'],
    				'SMILEY_WIDTH'	=> $row['smiley_width'],
    				'SMILEY_HEIGHT'	=> $row['smiley_height'],
    				'SMILEY_DESC'	=> $row['emotion'])
    			);
    		}
    	}
    
    	if ($mode == 'inline' && $display_link)
    	{
    		$template->assign_vars(array(
    			'S_SHOW_SMILEY_LINK' 	=> true,
    			'U_MORE_SMILIES' 		=> append_sid("{$phpbb_root_path}posting.$phpEx", 'mode=smilies&f=' . $forum_id))
    		);
    	}
    
    	if ($mode == 'window')
    	{
    		page_footer();
    	}
    }
    mit

    Code: Alles auswählen

    /** 
    *
    * @package phpBB3
    * @version $Id: functions_posting.php,v 1.262 2007/07/25 16:06:10 acydburn Exp $
    * @copyright (c) 2005 phpBB Group 
    * @license http://opensource.org/licenses/gpl-license.php GNU Public License 
    *
    */
    
    /**
    * Fill smiley templates (or just the variables) with smilies, either in a window or inline
    */
    include_once($phpbb_root_path . 'includes/functions_posting_smileys.' . $phpEx);
    
    ersetzen.
  3. in der config.XXX im phpbb-root am ende, direkt vor dasdas hier:

    Code: Alles auswählen

    include_once($phpbb_root_path . 'includes/functions_posting_smileys.' . $phpEx);
    $template->assign_vars(array(
       'SMILIES_STATUS'      => (($config['allow_bbcode'] && $config['allow_smilies']) ? $user->lang['SMILIES_ARE_ON'] : $user->lang['SMILIES_ARE_OFF']),
       'S_SMILIES_ALLOWED'      => $smilies_status,
    ));
    // Build smilies array
    generate_smilies('inline', 0);
    
    einfügen.
Hoffe, dass dies irgendjemandem weiterhilft....

also von mir aus [closed]

mfg,
Kerwindena

Re: Smileys global verfügbar machen

Verfasst: 14.05.2009 10:05
von Trash-Master
Soweit ist das ja alles ganz praktisch und ich würde das auch gerne anwenden, wenn ich nicht dann an der entsprechenden Stelle (der Mypage (Mod) Editor im UCP) immer diesen Fehler kriegen würde:

Code: Alles auswählen

Fatal error: Call to a member function assign_vars() on a non-object in /home/www/**********/phpbb3/config.php on line 20
Da wo die Smilies aber schon vor der Änderung funktionierten, funktionieren sie auch weiterhin.

Kann jemand helfen?

lg,
TrashMaster