Gastenboek - verplichte velden

Nederlandse ondersteuning voor CMS Made Simple

Moderator: velden

Post Reply
User avatar
Edida
Power Poster
Power Poster
Posts: 408
Joined: Sun Jun 25, 2006 4:58 pm

Gastenboek - verplichte velden

Post 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.
Edida
Dee
Power Poster
Power Poster
Posts: 1197
Joined: Sun Mar 19, 2006 8:46 pm

Re: Gastenboek - verplichte velden

Post 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
Last edited by Anonymous on Sun Mar 18, 2007 12:55 pm, edited 1 time in total.
User avatar
Edida
Power Poster
Power Poster
Posts: 408
Joined: Sun Jun 25, 2006 4:58 pm

Re: Gastenboek - verplichte velden

Post 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
Edida
Dee
Power Poster
Power Poster
Posts: 1197
Joined: Sun Mar 19, 2006 8:46 pm

Re: Gastenboek - verplichte velden

Post 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
User avatar
Edida
Power Poster
Power Poster
Posts: 408
Joined: Sun Jun 25, 2006 4:58 pm

Re: Gastenboek - verplichte velden

Post 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)
Edida
Dee
Power Poster
Power Poster
Posts: 1197
Joined: Sun Mar 19, 2006 8:46 pm

Re: Gastenboek - verplichte velden

Post 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
User avatar
Edida
Power Poster
Power Poster
Posts: 408
Joined: Sun Jun 25, 2006 4:58 pm

Re: Gastenboek - verplichte velden

Post 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
Edida
Dee
Power Poster
Power Poster
Posts: 1197
Joined: Sun Mar 19, 2006 8:46 pm

Re: Gastenboek - verplichte velden

Post 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
User avatar
Edida
Power Poster
Power Poster
Posts: 408
Joined: Sun Jun 25, 2006 4:58 pm

Re: Gastenboek - verplichte velden

Post 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
Edida
Post Reply

Return to “Dutch - Nederlands”