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

Rekomendowane odpowiedzi

Opublikowano (edytowane)

Witam,

Mam kod odpowiedzialny za kupno ikonki. Klikając na obrazek pokazuje Popup, który zawiera informacje jakie są wymagania na zakup. Oto one:

  1. Cena w Forum Gold
  2. Grupy
  3. Ilość postów
  4. Ilość reputacji

I dzięki temu chcę obok parsować makro, które będzie odpowiedzialne za to czy spełniamy warunki czy też nie. Nie ma problemu ze stworzeniem, użyciem makro, ale zastanawiam się jak to wykonać po stronie logiki. Nie chcę dawać przynajmniej 10 if'ów na zasadzie:

if( $this->memberData['posts'] > $icon['image_required_posts'] )
{
$icon['image_required_posts'] .= ' '.$this->registry->output->getReplacement( 'pass' );
}
else
{
$icon['image_required_posts'] .= ' '.$this->registry->output->getReplacement( 'fail' );
}

Myślałem nad pętla i sprawdzać to, ale jak? Coś na zasadzie rejestracji w IP.Board, ona po kolei sprawdza po stronie PHP błędy w ten sposób, że iteruje pętle na sztywno wpisaną, składająca się z kluczy nazw danych pól. U siebie też to tak chciałem zrobić, ale jak mam sprawdzać tak wiele wymagań? To jest skrypt pisany dla Ajax. Kod jego to:

	/**
* Return Icon Info
*
* @param	void
* @access	private
* @return	string
*/
private function showIconInfo()
{
	/* INIT */
	$id 	= intval( $this->request['image_id'] );
	$errors = array();

	/* Variable send? */
	if( !$id )
	{
		$this->returnString( 'error' );
	}

	/* Loading... */
	/*$icon = $this->DB->buildAndFetch( array( 'select'		=> 'i.*',
											 'from'			=> array( 'fg_icons' => 'i' ),
											 'add_join'		=> array( 0 => array(
												'select'	=> 'm.*',
												'from'		=> array( 'fg_members_icons' => 'm' ),
												'where'		=> 'i.image_id=m.image.id',
												'type'		=> 'join' ) ),
											 'where'		=> 'image_id = '.$id ) );*/

	$icon = $this->DB->buildAndFetch( array( 'select' => '*',
											 'from'	 => 'fg_icons',
											 'where' => 'image_id = '.$id ) );

	/* Exists? */
	if( !$icon['image_id'] )
	{
		$this->returnString( 'error' );
	}

	$icon['image_href'] = $this->settings['img_url'].'/donate_icons/'.$icon['image_url'];

	/* Is formatted FG amount? */
	if( $this->memberData['member_fg'] < $icon['image_price'] )
	{
		$errors['image_price'] = 'Nie posiadasz wystarczającej ilości Forum Gold!';
	}

	$icon['image_price'] = $this->registry->getClass('ForumGoldLibrary')->doFormatFG( $icon['image_price'] );

	/* Posts is OK? Check every posts ^^ */
	if( $icon['image_required_posts'] )
	{
		if( $this->memberData['posts'] < $icon['image_required_posts'] )
		{
			$errors['image_required_posts'] = 'Nie posiadasz wystarczającej ilości postów!';
		}

		$icon['image_required_posts'] = $this->registry->class_localization->formatNumber( intval( $icon['image_required_posts'] ) );
	}

	/* Reputation... very usefull think */
	if( $icon['image_required_rep'] )
	{
		if( $icon['image_required_rep'] > $this->memberData['pp_reputation_points'] )
		{
			$errors['image_required_rep'] = 'Nie posiadasz wystarczającej reputacji!';
		}
	}

	/* Have groups permission? */
	if( $icon['image_required_groups'] )
	{
		$_cleanGroups = explode( ',', IPSText::cleanPermString( $icon['image_required_groups'] ) );

		if( is_array( $_cleanGroups ) )
		{
			/* List all groups, which is required to buy icon! */
			foreach( $_cleanGroups AS $group )
			{
				$groups[] = IPSLib::makeNameFormatted( $this->caches['group_cache'][ $group ]['g_title'], $group );
			}

			if( !in_array( $this->memberData['member_group_id'], $_cleanGroups ) )
			{
				$errors['image_required_groups'] = 'Nie znajdujesz się w wymaganej grupie!';
			}

			$icon['image_required_groups'] = implode( ', ', $groups );
		}
	}

	/* So, special icon is set and enabled? */
	if( $icon['image_special'] )
	{
		if( time() < $icon['image_end_date'] )
		{
			/* Dates set? */
			if( $icon['image_start_date'] && $icon['image_end_date'] )
			{
				$icon['start'] = '<b>'.$this->registry->class_localization->getDate( $icon['image_start_date'], 'LONG' ).'</b>';
				$icon['end'] = '<b>'.$this->registry->class_localization->getDate( $icon['image_end_date'], 'LONG' ).'</b>';
			}
		}
	}

	/* Lopp through the all possible errors */
	$elements = array( 'image_price', 'image_required_posts', 'image_required_rep', 'image_required_groups' );

	foreach( $elements AS $key )
	{
		/* Element exists? */
		if( $icon[ $key ] )
		{
			if( isset( $errors[ $key ] ) )
			{
				$icon[ $key ] .= ' '.$this->registry->output->getReplacement( 'report_red_alert' );
			}
			else
			{
				$icon[ $key ] .= ' '.$this->registry->output->getReplacement( 'report_green_alert' );
			}
		}
	}

	$this->returnHtml( $this->registry->output->getTemplate('fg')->showIconPopup( $icon ) );
}

Liczę, że podsunie mi ktoś oryginalny pomysł i rozwiąże problem wielu warunków.

PS. OK, poradziłem sobie i wg. pętli idzie elegancko :-) Kod zamieszczam wyżej w miejsce tego starego :-)

Pozdrawiam,

Largo

Edytowane przez Largo

Jeżeli Ci pomogłem, nie zapomnij proszę o kliknięciu - add.png

Możesz liczyć na moją pomoc z zakresu: PHP5, MySQL, JavaScript i Ajax | W trakcie nauki CSS i xHTML!

W sprawie pomocy z zakresu IP.Board służę pomocą w dziale Zaawansowane programowanie IP.Board

Proszę o nie wysyłanie próśb PW o prywatną pomoc - pomagam JEDYNIE na forum lub na zlecenie!

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ę.