Page 1 of 1

Gastenboek - verplichte velden

Posted: Sun Mar 18, 2007 12:01 am
by Edida
Hallo deskundigen  ;D

Hoe krijg ik het voor elkaar om verplichte velden te creëren in het gastenboek?
Dus: verplicht mailadres in laten vullen e.d.?
Ik gebruik de laatste versie inclusief smileys en chaptcha.
Naam en bericht schijnen wel verplicht te zijn.

Graag zo simpel mogelijk uitleggen, want ik ben een leek op gebied van scripting.

Bij voorbaat dank voor de hulp.

Re: Gastenboek - verplichte velden

Posted: Sun Mar 18, 2007 12:49 pm
by Dee
Nou... daar gaan we dan :)
Open lib/module/class.GuestbookFrontend.php.
Voeg eerst een nieuwe foutconstante toe (aan degene die er al staan) bovenaan het script (regel 11):

Code: Select all

define('CMS_GB_ERROR_NO_EMAIL'     , 'CMS_GB_ERROR_NO_EMAIL');
Scroll dan naar beneden naar de method/function ValidatePost (regel 299). Hier worden de verstuurde waarden gecontroleerd.
Ietsje lager, regel 347 wordt al van een aantal velden gecontroleerd of ze leeg zijn:

Code: Select all

		// Check if fields are filled in
		if (!$_POST['sender'])
		{
			$errors[] = CMS_GB_ERROR_NOSENDER;
		}
		if (!$_POST['message'] || $_POST['message'] == '')
		{
			$errors[] = CMS_GB_ERROR_NOMESSAGE;
		}
Voeg daar de nieuwe controle toe:

Code: Select all

		// Check if fields are filled in
		if (!$_POST['sender'])
		{
			$errors[] = CMS_GB_ERROR_NOSENDER;
		}
		if (!$_POST['message'] || $_POST['message'] == '')
		{
			$errors[] = CMS_GB_ERROR_NOMESSAGE;
		}
		if (!$_POST['e_mail'] || trim($_POST['e_mail']) == '')
		{
			$errors[] = CMS_GB_ERROR_NO_EMAIL;
		}
Sla class.GuestbookFrontend.php nu op en open action.default.php.
Hierin wordt het formulier gepost, rond regel 44 vind je de volgende code:

Code: Select all

	// validate the entry
	$errors = $frontend->ValidatePost($params, $captcha);
	if (!empty($errors))
	{
		// show errors
		$frontend->setShowErrors(TRUE);
		$gb_error_messages = array(
			CMS_GB_ERROR_NOSENDER      => 'fabsend',
			CMS_GB_ERROR_NOMESSAGE     => 'fmessag',
			CMS_GB_ERROR_UNIQUE        => 'fui',
			CMS_GB_ERROR_TOOSOON       => 'toosoon',
			CMS_GB_ERROR_INVALID_EMAIL => 'femail',
			CMS_GB_ERROR_TOOLONG       => 'tolong',
			CMS_GB_ERROR_CAPTCHA       => 'captcha_failure_message',
			CMS_GB_ERROR_BADWORDS      => 'badwords_message'
		);
Voeg hier de nieuwe fout aan toe:

Code: Select all

		// show errors
		$frontend->setShowErrors(TRUE);
		$gb_error_messages = array(
			CMS_GB_ERROR_NOSENDER      => 'fabsend',
			CMS_GB_ERROR_NOMESSAGE     => 'fmessag',
			CMS_GB_ERROR_UNIQUE        => 'fui',
			CMS_GB_ERROR_TOOSOON       => 'toosoon',
			CMS_GB_ERROR_INVALID_EMAIL => 'femail',
			CMS_GB_ERROR_TOOLONG       => 'tolong',
			CMS_GB_ERROR_CAPTCHA       => 'captcha_failure_message',
			CMS_GB_ERROR_BADWORDS      => 'badwords_message',
			CMS_GB_ERROR_NO_EMAIL      => 'no_email'
		);
Nu moet alleen nog de foutmelding aan het taalbestand (lang/ext/nl_NL.php) worden toegevoegd:

Code: Select all

$lang['no_email'] = 'Voer een E-Mail adres in';
Grtz,
D

Re: Gastenboek - verplichte velden

Posted: Sun Mar 18, 2007 3:04 pm
by Edida
Hallo Dee,

Hartstikke gaaf dat je zo snel antwoord geeft.
Ik heb volgens mij precies gedaan zoals je het hebt aangegeven (copy-paste) - De bestanden aangepast in de map modules/guestbook/ en dat de paden die jij aangaf.

Maar na uploaden van de aangepaste bestanden krijg ik bij aanklikken van het gastenboek deze foutmelding:

Parse error: syntax error, unexpected T_STRING, expecting ')' in /home/edida/domains/muurkrant.org/public_html/modules/Guestbook/action.default.php on line 55

En dit is wat er nu in action.defalt.php staat rond regel 55:

Code: Select all

	// validate the entry
	$errors = $frontend->ValidatePost($params, $captcha);
	if (!empty($errors))
	{
		// show errors
		$frontend->setShowErrors(TRUE);
		$gb_error_messages = array(
			CMS_GB_ERROR_NOSENDER      => 'fabsend',
			CMS_GB_ERROR_NOMESSAGE     => 'fmessag',
			CMS_GB_ERROR_UNIQUE        => 'fui',
			CMS_GB_ERROR_TOOSOON       => 'toosoon',
			CMS_GB_ERROR_INVALID_EMAIL => 'femail',
			CMS_GB_ERROR_TOOLONG       => 'tolong',
			CMS_GB_ERROR_CAPTCHA       => 'captcha_failure_message',
			CMS_GB_ERROR_BADWORDS      => 'badwords_message'
			CMS_GB_ERROR_NO_EMAIL      => 'no_email'
		);
		foreach($errors as $index => $gb_error)
		{
			switch (gettype($gb_error))
			{
				case 'string': 
					$errors[$index] = $this->Lang($gb_error_messages[$gb_error]);
					break;
				case 'array':
					$errors[$index] = $this->Lang($gb_error_messages[$gb_error[0]], $gb_error[1]);
					break;
			}
		}
		$this->smarty->assign('errors', $errors);
	}
	else
	{
		// set the badwords parameter
		$params['badwords'] = split("[\n ,]", $this->GetPreference('badwords'));
		foreach ($params['badwords'] as $index => $word)
		{
			if (trim($word) == '') {
				unset($params['badwords'][$index]);
			}
			else
			{
				$params['badwords'][$index] = trim($word);
			}
		}
		// apply bad word filter
		if (!empty($params['badwords']))
		{
			$alt_chars = array
				(
					'/a/i' => '[a@]',
					'/b/i' => '[b3]',
					'/i/i' => '[i1!|]',
					'/s/i' => '[s\$5]',
					'/t/i' => '[t+]',
					'/z/i' => '[z2]'
				);
			$badwords = $params['badwords'];
			array_walk($badwords, array($frontend, 'MakeRegex'), $alt_chars);
			$_POST['message'] = preg_replace($badwords, $this->GetPreference('badwords_replacement'), $_POST['message']);
		}
		
		if ($this->ModuleIsInstalled('FCKeditorX') && $this->GetPreference('wysiwyg') == '1')
		{
Het is vast maar een kleinigheidje, maar wat doe ik verkeerd?
Hopelijk krijg ik weer zo snel antwoord, want nu werkt het in het geheel niet meer :-(

Ow ja, ik heb voor alle zekerheid het buffer geleegd (geen idee of dat enig nut heeft, maar je weet nooit). ;-)

Groetjes
Edida

Re: Gastenboek - verplichte velden

Posted: Sun Mar 18, 2007 4:25 pm
by Dee
Edida wrote: Het is vast maar een kleinigheidje, maar wat doe ik verkeerd?

Code: Select all

CMS_GB_ERROR_BADWORDS      => 'badwords_message'
Omdat dit nu de een-na-laatste regel moet er een comma achter.

Grtz,
D

Re: Gastenboek - verplichte velden

Posted: Mon Mar 19, 2007 12:38 am
by Edida
Hallo weer,

Ik zei toch: een kleinigheid -  ;) had ik eigenlijk zelf moeten zien, want dat snap ik nog net wel van scripts.  ::)
En ja, het gastenboek laat zich weer zien.  :)

Maar..... helaas heeft het allemaal geen effect gehad, want ik kan nog steeds berichtjes ingeven, zonder het veld e-mail ingevuld te hebben en daar ging het nou net om.  ???

19-03-2007 00:40 uur Edida ( hier , NL )
Uw bericht is geplaatst
Bericht 1-7 van 7.

19-03-2007 00:45 uur ikke ( hier , nogmaals )
nog een poging nu met leeg buffer.

Homepage: http://boschspace.com
kan toch gewoon een bericht plaatsen, ook al is de mail niet ingevuld. Vreemd

19-03-2007 00:38 uur webmaster ( Hengelo Ov , Nederland )
Homepage: http://muurkrant.org
testmail - check verplichte mailregel


Hoe kan dat nu?

Nu ontdekte ik, dat ik in het pad /modules/guestbook/lib/classes/ nog een map heb, genaamd: module, waarin ook o.a. het bestand: class.GuestbookFrontend.php,
dus met pad helemaal: \modules\guestbook\lib\classes\module\class.GuestbookFrontend.php,
terwijl die dus ook staat in pad \modules\guestbook\lib\classes\

Jij gaf als pad aan: lib/module/class.GuestbookFrontend.php.

Ik heb beide bestanden met de nieuwe code overschreven. Ik denk nu dus, dat er iets niet goed zit met mijn module gastenbook, of wel?


Ik ben alweer benieuwd naar je volgende instructies
Bijvoorbaat dank

groetjes
Edida (http://muurkrant.org)

Re: Gastenboek - verplichte velden

Posted: Mon Mar 19, 2007 10:08 am
by Dee
modules/Guestbook/lib/classes/module/class.GuestbookFrontend.php is het juiste bestand.
Een directory modules/Guestbook/lib/module hoort er niet te zijn (kun je gewoon verwijderen).

Als ik nu het muurkrant gastenboek bekijk lijkt het alsof action.default.php niet goed is overschreven. Er komt wel een fout terug, maar die wordt niet gekoppeld aan een regel uit het taalbestand:
--Add Me - module:Guestbook string:--
Grtz,
D

Re: Gastenboek - verplichte velden

Posted: Mon Mar 19, 2007 3:27 pm
by Edida
Hallo Dee,

Het werkt nu! :-) Geweldig! Bedankt!  ;D :D

Heb het bestand een keertje gedelete - een 'oude' van de install opnieuw aangepast (met komma!  :P) en die weer geupload.
Heb zelfs ontdekt dat ik de kleur van de foutmelding in het gastenboek (in Admin) Templates - en dan in gastenboek sjabloon kon aanpassen, dus nu laat hij de foutmelding(en) netjes in rood zien - dat valt nl. wat beter op, dan zwart/bold.

Ik heb het bestand (in de map) /modules/guestbook/lib/class.GuestbookFrontend.php weggehaald, maar er staat nu nog: index.html en SmartyPaginate.class.php in. Kan ik die ook probleemloos verwijderen? De map \module\ staat er natuurlijk nog wel in.

Nog één vraagje, dan kan dit onderwerp denk ik wel worden afgesloten :-)
Wanneer er nu een update komt voor guestbook en ik zet die er overheen, ben ik dan al mijn (lees: deze/ jou) aanpassingen weer kwijt? Moet ik die dan weer eerst overschrijven? Of juist die nieuwe bestanden op deze manier aanpassen?
't Zou trouwens mooi zijn, wanneer je dit soort aanpassingen op dezelfde manier kunt doen, zoals bij forms. Daar kun je volgens mij precies aangeven welke velden wel/niet verplicht zijn, ja toch?

Ik hoor weer

Re: Gastenboek - verplichte velden

Posted: Mon Mar 19, 2007 4:38 pm
by Dee
Als je markup en presentatie gescheiden wilt houden is het netter de kleur van de foutmeldingen in de stylesheet te definieren:
In de "Guestbook Template"

Code: Select all

{foreach from=$errors item=error}
	<strong>{$error}</strong><br />
{/foreach}
wijzigen in

Code: Select all

{foreach from=$errors item=error}
	<div class="error">{$error}</div>
{/foreach}
En dan in je Guestbook stylesheet iets als:

Code: Select all

/* Style the errors */
div.cms-guestbook div.error
{
  font-weight: bold;
  color: red;
}
De index.html (leeg bestandje) en SmartyPaginate.class.php bestanden horen in de lib/ directory, die dus niet verwijderen.

Bij een update van de Guestbook module moeten de nieuwe bestanden op deze manier worden aangepast.
Het zit wel in de planning om het in een latere versie mogelijk te maken om aan te geven welke velden verplicht zijn en om velden toe te voegen (als bij FormBuilder), maar ik ben bang dat het daar voorlopig niet van gaat komen.

Grtz,
D

Re: Gastenboek - verplichte velden

Posted: Mon Mar 19, 2007 6:22 pm
by Edida
Hallo weer Dee,

Ik weet niet wat met markup bedoeld wordt; presentatie lijkt me wel duidelijk. Ik ben met jouw aanwijzingen aan de slag gegaan en ja, hoera op mijn schoolsite werkt dit, dus ga ik dit ook nog in de muurkrantsite aanpassen. :-)
Het was ff zoeken, want ik zag in de gastenboek-module wel templates staan (die ik dus als hieronder omschreven heb aangepast), maar zag geen stylesheet.
Natuurlijk wél onder Opmaak/Stylsheets, alleen moest ik nog ff zelf bedenken om de Stylesheet met de naam: Gastenboek (standaard/voorbeeld stylesheet) - te kopiëren en om te noemen naar sec: Gastenboek. En toen kreeg ik inderdaad keurig de tekst in rood/bold op het scherm.

Hartelijk dank voor je goeie begeleiding.
Dit topic kan nu dicht.

m vr gr
Edida