Skocz do zawartości
"Idzie nowe..." - o zmianach i nie tylko ×
Przeniesienie zakupów z IPS Marketplace / Moving bought items from IPS Marketplace ×

ROZWIĄZANY: Modyfikacja pokazująca skład forum


Rekomendowane odpowiedzi

Witam, potrzebuję modyfikacji, która pokazuje skład forum. Oto jej przykład na bazie MyBB 1.6 www.armia-css.pl/showteam.php

Oto kod do tego: [long]<?php

/**

* MyBB 1.6

* Copyright 2010 MyBB Group, All Rights Reserved

*

* Website: http://mybb.com

* License: http://mybb.com/about/license

*

* $Id: showteam.php 5110 2010-07-25 08:39:23Z RyanGordon $

*/

define("IN_MYBB", 1);

define('THIS_SCRIPT', 'showteam.php');

$templatelist = 'showteam,showteam_row,showteam_row_mod,postbit_email,postbit_pm';

$templatelist .= ',showteam_usergroup_user,showteam_usergroup,showteam_moderators_mod';

$templatelist .= ',showteam_moderators,showteam_moderators_forum';

require_once "./global.php";

// Load global language phrases

$lang->load('showteam');

add_breadcrumb($lang->nav_showteam);

$plugins->run_hooks('showteam_start');

$usergroups = array();

$moderators = array();

$users = array();

// Fetch the list of groups which are to be shown on the page

$query = $db->simple_select("usergroups", "gid, title, usertitle", "showforumteam=1", array('order_by' => 'disporder'));

while($usergroup = $db->fetch_array($query))

{

$usergroups[$usergroup['gid']] = $usergroup;

}

if(empty($usergroups))

{

error($lang->error_noteamstoshow);

}

// Fetch specific forum moderator details

if($usergroups[6]['gid'])

{

$query = $db->query("

SELECT m.*, f.name

FROM ".TABLE_PREFIX."moderators m

LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=m.id)

LEFT JOIN ".TABLE_PREFIX."forums f ON (f.fid=m.fid)

WHERE f.active = 1 AND m.isgroup = 0

ORDER BY u.username

");

while($moderator = $db->fetch_array($query))

{

$moderators[$moderator['id']][] = $moderator;

}

}

// Now query the users of those specific groups

$groups_in = implode(",", array_keys($usergroups));

$users_in = implode(",", array_keys($moderators));

if(!$groups_in)

{

$groups_in = 0;

}

if(!$users_in)

{

$users_in = 0;

}

$forum_permissions = forum_permissions();

$query = $db->simple_select("users", "uid, username, displaygroup, usergroup, ignorelist, hideemail, receivepms", "displaygroup IN ($groups_in) OR (displaygroup='0' AND usergroup IN ($groups_in)) OR uid IN ($users_in)", array('order_by' => 'username'));

while($user = $db->fetch_array($query))

{

// If this user is a moderator

if(isset($moderators[$user['uid']]))

{

foreach($moderators[$user['uid']] as $forum)

{

if($forum_permissions[$forum['fid']]['canview'] == 1)

{

$forum_url = get_forum_link($forum['fid']);

eval("\$forumlist .= \"".$templates->get("showteam_moderators_forum")."\";");

}

}

$user['forumlist'] = $forumlist;

$forumlist = '';

$usergroups[6]['user_list'][$user['uid']] = $user;

}

if($user['displaygroup'] == '6' || $user['usergroup'] == '6')

{

$usergroups[6]['user_list'][$user['uid']] = $user;

}

// Are they also in another group which is being shown on the list?

if($user['displaygroup'] != 0)

{

$group = $user['displaygroup'];

}

else

{

$group = $user['usergroup'];

}

if($usergroups[$group] && $group != 6)

{

$usergroups[$group]['user_list'][$user['uid']] = $user;

}

}

// Now we have all of our user details we can display them.

$grouplist = '';

foreach($usergroups as $usergroup)

{

// If we have no users - don't show this group

if(!isset($usergroup['user_list']))

{

continue;

}

$bgcolor = '';

foreach($usergroup['user_list'] as $user)

{

$user['username'] = format_name($user['username'], $user['usergroup'], $user['displaygroup']);

$user['profilelink'] = get_profile_link($user['uid']);

// For the postbit templates

$post['uid'] = $user['uid'];

$emailcode = $pmcode = '';

if($user['hideemail'] != 1)

{

eval("\$emailcode = \"".$templates->get("postbit_email")."\";");

}

if($user['receivepms'] != 0 && $mybb->settings['enablepms'] != 0 && my_strpos(",".$user['ignorelist'].",", ",".$mybb->user['uid'].",") === false)

{

eval("\$pmcode = \"".$templates->get("postbit_pm")."\";");

}

$bgcolor = alt_trow();

// If the current group is a moderator group

if($usergroup['gid'] == 6 && !empty($user['forumlist']))

{

$forumslist = $user['forumlist'];

eval("\$modrows .= \"".$templates->get("showteam_moderators_mod")."\";");

}

else

{

eval("\$usergrouprows .= \"".$templates->get("showteam_usergroup_user")."\";");

}

}

if($usergroup['gid'] == 6 && !empty($user['forumlist']))

{

eval("\$grouplist .= \"".$templates->get("showteam_moderators")."\";");

}

else

{

eval("\$grouplist .= \"".$templates->get("showteam_usergroup")."\";");

}

$usergrouprows = '';

}

if(empty($grouplist))

{

error($lang->error_noteamstoshow);

}

$plugins->run_hooks("showteam_end");

eval("\$showteam = \"".$templates->get("showteam")."\";");

output_page($showteam);

?>[/long]

Znacie taką modyfikację?

Z góry dzięki za pomoc eXo

Edytowane przez eXorcist
Odnośnik do komentarza
Udostępnij na innych stronach

No niby znalazłem kod odpowiadający za to, ale teraz patrze że pokazuje on osoby mające np. dostęp do ACP:

//-----------------------------------------

// PRINT: Admins

//-----------------------------------------

$admins = array();

$supmods = array();

foreach( $members as $member )

{

if ( $this->caches['group_cache'][ $member['member_group_id'] ]['g_access_cp'] )

{

$member['forums'] = $this->lang->words['leader_all_forums'];

//-----------------------------------------

// Used...

//-----------------------------------------

$used_ids[] = $member['member_id'];

$admins[] = $member;

}

}

$this->output .= $this->registry->getClass('output')->getTemplate('stats')->group_strip( $this->lang->words['leader_admins'], $admins );

To teraz przerobić tak ten kod żeby pokazywało osoby z grupy o id X .

Pomoże ktoś?

Odnośnik do komentarza
Udostępnij na innych stronach

A możecie mi powiedzieć co źle robię?

[long] //-----------------------------------------

// PRINT: Admins

//-----------------------------------------

$admins = array();

$supmods = array();

$grupa = array();

foreach( $members as $member )

{

if ( $this->caches['group_cache'][ $member['member_group_id'] ]['g_access_cp'] )

{

$member['forums'] = $this->lang->words['leader_all_forums'];

//-----------------------------------------

// Used...

//-----------------------------------------

$used_ids[] = $member['member_id'];

$admins[] = $member;

}

}

$this->output .= $this->registry->getClass('output')->getTemplate('stats')->group_strip( $this->lang->words['leader_admins'], $admins );

//-----------------------------------------

// PRINT: Grupa

//-----------------------------------------

foreach( $members as $member )

{

if ( $this->caches['group_cache'][ $member['member_group_id'] ]['15'] )

{

$member['forums'] = $this->lang->words['leader_all_forums'];

//-----------------------------------------

// Used...

//-----------------------------------------

$used_ids[] = $member['member_id'];

$grupa[] = $member;

}

}

$this->output .= $this->registry->getClass('output')->getTemplate('stats')->group_strip( $this->lang->words['leader_admins'], $grupa );

[/long]

Edytowane przez eXorcist
Odnośnik do komentarza
Udostępnij na innych stronach

  • Manager

Napisano Ci wyżej - nie ma gotowego rozwiązania i trzeba to zakodować. Jeśli podany kod Ci nie działa, to może jest jakiś objaw tego? Opisz jak najwięcej potrafisz. Co zmieniasz, w jakim pliku, co na co itd.

intermedia - profesjonalne rozwiązania Invision Power Board

---

Chcesz uzyskać szybko i sprawnie pomoc? Uzupełnij wersję i adres w profilu.

Odnośnik do komentarza
Udostępnij na innych stronach

No to zaczynamy:

W pliku stats.php (public_html/forum/admin/applications/forums/modules_public/extras/stats.php) DODAJĘ kod [long] // PRINT: Grupa

//-----------------------------------------

foreach( $members as $member )

{

if ( $this->caches['group_cache'][ $member['member_group_id'] ]['15'] )

{

$member['forums'] = $this->lang->words['leader_all_forums'];

//-----------------------------------------

// Used...

//-----------------------------------------

$used_ids[] = $member['member_id'];

$grupa[] = $member;

}

}

$this->output .= $this->registry->getClass('output')->getTemplate('stats')->group_strip( $this->lang->words['leader_admins'], $grupa );

[/long]

po linijce 452. Oczywiście dodaję też po linijce 433 [long]$grupa = array();[/long]

Całość po zmianie wygląda tak: [long] //-----------------------------------------

// PRINT: Admins

//-----------------------------------------

$admins = array();

$supmods = array();

$grupa = array();

foreach( $members as $member )

{

if ( $this->caches['group_cache'][ $member['member_group_id'] ]['g_access_cp'] )

{

$member['forums'] = $this->lang->words['leader_all_forums'];

//-----------------------------------------

// Used...

//-----------------------------------------

$used_ids[] = $member['member_id'];

$admins[] = $member;

}

}

$this->output .= $this->registry->getClass('output')->getTemplate('stats')->group_strip( $this->lang->words['leader_admins'], $admins );

//-----------------------------------------

// PRINT: Grupa

//-----------------------------------------

foreach( $members as $member )

{

if ( $this->caches['group_cache'][ $member['member_group_id'] ]['15'] )

{

$member['forums'] = $this->lang->words['leader_all_forums'];

//-----------------------------------------

// Used...

//-----------------------------------------

$used_ids[] = $member['member_id'];

$grupa[] = $member;

}

}

$this->output .= $this->registry->getClass('output')->getTemplate('stats')->group_strip( $this->lang->words['leader_admins'], $grupa );[/long]

Końcowy efekt: http://forum.armia-css.pl/index.php?app=forums&module=extras&section=stats&do=leaders (czyli po poprawnym wyświetleniu adminów jest kolejna tabelka o nazwie Administratorzy. Tyle że w niej nie ma osób z grupy o ID 15)

Odnośnik do komentarza
Udostępnij na innych stronach

  • Manager

Bez znajomości PHP się tego nie zrobi. Nie potrzeba znajomości OOP, by wydumpować zawartość zmiennej lokalnej.

intermedia - profesjonalne rozwiązania Invision Power Board

---

Chcesz uzyskać szybko i sprawnie pomoc? Uzupełnij wersję i adres w profilu.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Manager

To niech ten kolega się tutaj zarejestruje i pyta, bo tego nie zrobi się ot tak paroma kliknięciami. Trzeba najpierw pobrać userów z bazy, potem ich przeparsować i dodać do szablonu.

intermedia - profesjonalne rozwiązania Invision Power Board

---

Chcesz uzyskać szybko i sprawnie pomoc? Uzupełnij wersję i adres w profilu.

Odnośnik do komentarza
Udostępnij na innych stronach

Ok, ja jestem tym kolegą ;-)

$this->cache->getCache('moderators')

jak sie domyslam to pobiera z pamieci skryptu forum(cashu) moderatorów.

Jestem zainteresowany żeby odnaleźć plik źródłowy aby dowiedzieć sie jak to działa.

z uwagi na to ze nie ma tego w stats.php

to domyslam się ze dziedziczy po klasie ipsCommand

class public_forums_extras_stats extends ipsCommand

i teraz pytanie gdize jest ta klasa?

Edytowane przez Horex
Odnośnik do komentarza
Udostępnij na innych stronach

Ok, ja jestem tym kolegą ;-)

$this->cache->getCache('moderators')

jak sie domyslam to pobiera z pamieci skryptu forum(cashu) moderatorów.

Jestem zainteresowany żeby odnaleźć plik źródłowy aby dowiedzieć sie jak to działa.

z uwagi na to ze nie ma tego w stats.php

to domyslam się ze dziedziczy po klasie ipsCommand

class public_forums_extras_stats extends ipsCommand

i teraz pytanie gdize jest ta klasa?

ok znalazlem ipsController_setup.php

btw czemu nie da sie edytowac juz po 20 minutach?

Odnośnik do komentarza
Udostępnij na innych stronach

  • Manager

Hym, powiem Ci tak - nie interesuj się dalej tymi klasami w głąb, bo wszystko co potrzeba jest w tej klasie i metodzie, co podawaliśmy - tam gdzie jest kod wyświetlający statystyki.

Otwórz plik: admin/applications/forums/modules_public/extras/stats.php

Znajdź:

$this->registry->output->setTitle( $this->lang->words['forum_leaders']  . ' - ' . ipsRegistry::$settings['board_name'] );

Dodaj powyżej:


	/* (DP31) Statistics Custom Group */

	$this->DB->build( array( 
							'select'	=> 'm.*, m.member_id as user_member_id',
							'from'		=> array( 'members' => 'm' ),
							'where'		=> "m.member_group_id = 7",
							'add_join'	=> array(
													array( 
															'select' => 'pp.*',
															'from'	 => array( 'profile_portal' => 'pp' ),
															'where'	 => 'pp.pp_member_id=m.member_id',
															'type'	 => 'left',
														),
													array( 
															'select' => 's.*',
															'from'	 => array( 'sessions' => 's' ),
															'where'	 => 's.member_id=m.member_id',
															'type'	 => 'left',
														),
													array( 
															'select' => 'pf.*',
															'from'	 => array( 'pfields_content' => 'pf' ),
															'where'	 => 'pf.member_id=m.member_id',
															'type'	 => 'left',
														),
												)

	) );

	$this->DB->execute();

		if ( $this->DB->getTotalRows() )
		{
			while( $r = $this->DB->fetch() )
			{
				$customGroup[] = IPSMember::buildDisplayData( $r );
			}
		}

	if( count( $customGroup ) )
	{
		$this->output .= $this->registry->getClass('output')->getTemplate('stats')->group_strip( $this->caches['group_cache'][7 ]['g_title'], $customGroup );
	}

Zapisz i wyślij.

7 to ID nowej grupy.

Efekt:

pre_1299409978__2011-03-06_12-12-33.png

[ + ]

Spóźniłem się. :P

intermedia - profesjonalne rozwiązania Invision Power Board

---

Chcesz uzyskać szybko i sprawnie pomoc? Uzupełnij wersję i adres w profilu.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Manager

Automatyczna wiadomość

Ten temat został przeniesiony z forum:

"Invision Power Board -> Invision Power Board 3.x -> Modyfikacje - pomoc"

do:

"Invision Power Board -> Zaawansowane programowanie"

intermedia - profesjonalne rozwiązania Invision Power Board

---

Chcesz uzyskać szybko i sprawnie pomoc? Uzupełnij wersję i adres w profilu.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Manager

Problem ROZWIĄZANY. Jeśli są jakiekolwiek wątpliwości, pytania proszę o założenie nowego tematu.

Wszelkie uzasadnione reklamacje/pretensje/sugestie/rady przyjmuje ekipa forum.

intermedia - profesjonalne rozwiązania Invision Power Board

---

Chcesz uzyskać szybko i sprawnie pomoc? Uzupełnij wersję i adres w profilu.

Odnośnik do komentarza
Udostępnij na innych stronach

Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę.