preg_match_all upraviť

Programovacie jazyky, rady, poradňa...
jakubs777
Amateur
Amateur
Príspevky: 29
Registrovaný: 06 okt 2007, 13:08
Kontaktovať používateľa:

preg_match_all upraviť

Príspevok od používateľa jakubs777 »

Dobrý deň,

mám jeden web pomocou cms phpfusion (v7).

Existuje tam preň infusion, ak niekto pozná, že v celom webe mi upraví farbu nickov tak,
že podľa danej skupiny mi jednoducho sfarbí nicky členov.

Táto funkcia sa volá "nicks_mod_panel" a všetko funguje ako má, čiže ak sa niekto
nachádza v nejakej skupine a ja si to v administrácií nastavím, všetko ide ako má. až na jednu vec.

Stiahol som si infusion - jquery chat panel.

Tento panel ma v sebe refresh a je teda možné bez refreshovania stránky refreshnúť obsah len pre daný panel.

Tento refresh je však nakódovaný v javascripte a keď načítam stránku, farby nickom sa zobrazia správne,
no keď dám refresh panelu, farby nickom sa jednoducho upravia na defaultné.

Kód pre zobrazenia nicku na webe je (v danom panely - tento pred refereshom funguje):

Kód: Vybrať všetko

echo "<a href='".BASEDIR."profile.php?lookup=".$data['shout_name']."' class='shoutboxname' class='side'>".$data['user_name']."</a>\n";
no po refreshi už neukazuje tento link (hore), ale už z javascriptu a tam je kód takýto.

Kód: Vybrať všetko

var author = "<a href='"+basedir+"profile.php?lookup="+$("authorname",shout).text()+"' class='shoutboxname'>"+$("authoruname",shout).text()+"</a>";
funckia, ktorá prepisuje farbu nickom vyzerá takto

Kód: Vybrať všetko

function colore_nicks($buf) {
	include INFUSIONS.'nicks_mod_panel/nicks_mod_cache.php';
	if(!empty($nicks_mod_cache)) {
		preg_match_all('#<a.*?href=\''.BASEDIR.'profile\.php\?lookup=([0-9]+)\'.*?>#', $buf, $matches); 
		$matches = array_unique($matches[1]);
		if(!empty($matches)) {
			$users_ids = '';
			foreach($matches as $user_id) { $users_ids .= ($users_ids ? ',' : '').$user_id; }
			unset($matches);
			$result = dbquery('SELECT user_id, user_groups, user_level, user_primarygroup FROM '.DB_USERS.' WHERE (user_groups !="" OR user_level IN (102,103)) AND user_id IN ('.$users_ids.')');
			while($data = dbarray($result)) {
				$user_groups = (strpos($data['user_groups'], ".") == 0 ? explode(".", substr($data['user_groups'], 1)) : explode(".", $data['user_groups']));
				if($data['user_level']=='102' || $data['user_level']=='103') { $user_groups[] = "l".$data['user_level']; }
				if(isset($data['user_primarygroup']) && count($user_groups) > 1 && array_key_exists($data['user_primarygroup'], $nicks_mod_cache)) {
					$buf = preg_replace('#<a([^<>]*)href=\''.BASEDIR.'profile\.php\?lookup='.$data['user_id'].'\'([^<>]*)>([-0-9A-Z_@\s]*)</a>#si', '<a\\1href=\''.BASEDIR.'profile.php?lookup='.$data['user_id'].'\'\\2><span style=\'color:'.$nicks_mod_cache[$data['user_primarygroup']][0].';'.$nicks_mod_cache[$data['user_primarygroup']][2].'\'>'.$nicks_mod_cache[$data['user_primarygroup']][1].'\\3</span></a>', $buf);
				} else {
					foreach($user_groups as $user_group) {
						if(array_key_exists($user_group, $nicks_mod_cache)) { 
							$buf = preg_replace('#<a([^<>]*)href=\''.BASEDIR.'profile\.php\?lookup='.$data['user_id'].'\'([^<>]*)>([-0-9A-Z_@\s]*)</a>#si', '<a\\1href=\''.BASEDIR.'profile.php?lookup='.$data['user_id'].'\'\\2><span style=\'color:'.$nicks_mod_cache[$user_group][0].';'.$nicks_mod_cache[$user_group][2].'\'>'.$nicks_mod_cache[$user_group][1].'\\3</span></a>', $buf);
							break; 
						}
					}
				}
			}
		}
	}
	return $buf;
}

add_handler("colore_nicks");

Neviete niekto poradiť, aby som to upravil tak, aby to vedel rozoznať i ten kód v tom javascripte? som z toho už troška magor, hnevá ma to už pár dní a neviem to rozlúsknúť, aj keď je to určite len nejaká drobnosť.

Dúfam, že budete vedieť poradiť, pretože ja sa v tom preg_replace vôbec nevyznám.


Ďakujem za rady.

S pozdravom
Jakub
Napísať odpoveď