Seite 1 von 2 1 2 LetzteLetzte
Ergebnis 1 bis 10 von 17

Thema: Recaptcha in eine Form einbinden

  1. #1
    Neu an Board
    Registriert seit
    07.05.2007
    Beiträge
    10
    Bedankte sich
    3
    Erhielt 0 Danksagungen
    in 0 Beiträgen

    Frage Recaptcha in eine Form einbinden

    Hallo Joomla-Forum Gemeinde,
    Wie der Titel schon besagt, möchte ich das Captcha-Modul in eine Form einbauen. Konkret geht es hierbei um die Form zum Einsenden von Artikel. Leider habe ich keine weitreichenden php/html Kenntnisse, wodurch ich durch nun mit meiner Trail' n Error Taktik so ziemlich am Ende meine Möglichkeiten angelangt bin.

    Also zu meiner Überlegung:
    Ich möchte das "create Article" Formular mit einem ReCapatcha versehen und für Gäste nutzbar machen. Man findet die entsprechende .php Datei im components/com_content/views/form/edit.php Ordner. (Siehe Code 1*)

    Meine bisherigen Ansätze:
    1. Mit der Registrierung von Recaptcha gibt es auch eine umfangreiche Dokumentation zur Einbindung und speziellen Anpassung dieser API in seiner eigenen Webseite. Nun bin ich von der wohl naheliegendsten Lösung ausgegangen und habe die angegebenen php-Codes auf der Docs-Seite verwendet. Laut dem Doc muss man nun folgenden Code2* Client-seitig einbinden, also sprich in die Form integrieren. Alles gemacht und das Captcha erscheint auch wunderbar. Es überprüft auch den Code, aber mit dem überprüften Code verschickt es natürlich nicht den Artikel. Ich nahm nun an, dass zur Versendung folgender Code zuständig ist Code3*. Nun hatte ich versucht diese beiden Codes irgendwie in eine "Form" zubringen, aber bin dann wie schon angesprochen, an etwaigen php-Kenntnissen gescheitert.

    2. Habe ich mir überlegt, gut das Manuelle Einfügen des Standard-Codes scheint zu kompliziert, also habe ich versucht das mit Joomla 2.5 mitgelieferte Captcha-Plugin in mit der edit.php "zu verknüpfen". Dabei habe ich mich verschiedenster Code-Schnipsel , z.B. aus der components/com_users/models/registration.php (Code 4*) bedient, aber auch dies schlug fehl.

    Nun ist meine Frage,
    Es muss doch möglich sein, die Captcha-API in jede beliebige Form einzubinden, sonst wäre ja deren Zweck nicht erfüllt. Und zu dem muss die Captcha-API auch mit der entsprechenden Form "kommunizieren", sonst, wie es mir passiert ist, könnte ich den Artikel abschicken, ungeachtet dessen, dass ich überhaupt einen entsprechenden Sicherheits-Code eingeben habe.

    Wie kann ich nun die Captcha-Form oder das Captcha-API in meine entsprechende Form einbinden?

    Ich hoffe nun ihr könnt mir hier weiterhelfen.

    Danke schonmal im Voraus.
    Grüße Indy

    _____

    Code 1*
    components/com_content/views/form/edit.php:

    Code:
    <?php
    /**
     * @version		$Id: edit.php 22568 2011-12-20 18:25:22Z github_bot $
     * @package		Joomla.Site
     * @subpackage	com_content
     * @copyright	Copyright (C) 2005 - 2011 Open Source Matters, Inc. All rights reserved.
     * @license		GNU General Public License version 2 or later; see LICENSE.txt
     */
    
    // no direct access
    defined('_JEXEC') or die;
    
    JHtml::_('behavior.keepalive');
    JHtml::_('behavior.tooltip');
    JHtml::_('behavior.calendar');
    JHtml::_('behavior.formvalidation');
    
    // Create shortcut to parameters.
    $params = $this->state->get('params');
    //$images = json_decode($this->item->images);
    //$urls = json_decode($this->item->urls);
    
    // This checks if the editor config options have ever been saved. If they haven't they will fall back to the original settings.
    $editoroptions = isset($params->show_publishing_options);
    if (!$editoroptions):
    	$params->show_urls_images_frontend = '0';
    endif;
    ?>
    
    <script type="text/javascript">
    	Joomla.submitbutton = function(task) {
    		if (task == 'article.cancel' || document.formvalidator.isValid(document.id('adminForm'))) {
    			<?php echo $this->form->getField('articletext')->save(); ?>
    			Joomla.submitform(task);
    		} else {
    			alert('<?php echo $this->escape(JText::_('JGLOBAL_VALIDATION_FORM_FAILED'));?>');
    		}
    	}
    </script>
    <div class="edit item-page<?php echo $this->pageclass_sfx; ?>">
    <?php if ($params->get('show_page_heading', 1)) : ?>
    <h1>
    	<?php echo $this->escape($params->get('page_heading')); ?>
    </h1>
    <?php endif; ?>
    
    <form action="<?php echo JRoute::_('index.php?option=com_content&a_id='.(int) $this->item->id); ?>" method="post" name="adminForm" id="adminForm" class="form-validate">
    	<fieldset>
    		<legend><?php echo JText::_('JEDITOR'); ?></legend>
    
    			<div class="formelm">
    			<?php echo $this->form->getLabel('title'); ?>
    			<?php echo $this->form->getInput('title'); ?>
    			</div>
    
    		<?php if (is_null($this->item->id)):?>
    			<div class="formelm">
    			<?php echo $this->form->getLabel('alias'); ?>
    			<?php echo $this->form->getInput('alias'); ?>
    			</div>
    		<?php endif; ?>
    
    			<div class="formelm-buttons">
    			<button type="button" onclick="Joomla.submitbutton('article.save')">
    				<?php echo JText::_('JSAVE') ?>
    			</button>
    			<button type="button" onclick="Joomla.submitbutton('article.cancel')">
    				<?php echo JText::_('JCANCEL') ?>
    			</button>
    			</div>
    
    			<?php echo $this->form->getInput('articletext'); ?>
    
    	</fieldset>
    	<?php if ($params->get('show_urls_images_frontend')  ): ?>
    	<fieldset>
    		<legend><?php echo JText::_('COM_CONTENT_IMAGES_AND_URLS'); ?></legend>
    			<div class="formelm">
    			<?php echo $this->form->getLabel('image_intro','images'); ?>
    			<?php echo $this->form->getInput('image_intro','images'); ?>
    			</div>
    			<div style="clear:both"></div>
    			<div class="formelm">
    			<?php echo $this->form->getLabel('image_intro_alt','images'); ?>
    			<?php echo $this->form->getInput('image_intro_alt','images'); ?>
    			</div>
    			<div class="formelm">
    			<?php echo $this->form->getLabel('image_intro_caption','images'); ?>
    			<?php echo $this->form->getInput('image_intro_caption','images'); ?>
    			</div>
    			<div class="formelm">
    			<?php echo $this->form->getLabel('float_intro','images'); ?>
    			<?php echo $this->form->getInput('float_intro','images'); ?>
    			</div>
    
    			<div class="formelm">
    			<?php echo $this->form->getLabel('image_fulltext','images'); ?>
    			<?php echo $this->form->getInput('image_fulltext','images'); ?>
    			</div>
    			<div style="clear:both"></div>
    			<div class="formelm">
    			<?php echo $this->form->getLabel('image_fulltext_alt','images'); ?>
    			<?php echo $this->form->getInput('image_fulltext_alt','images'); ?>
    			</div>
    			<div class="formelm">
    			<?php echo $this->form->getLabel('image_fulltext_caption','images'); ?>
    			<?php echo $this->form->getInput('image_fulltext_caption','images'); ?>
    			</div>
    			<div class="formelm">
    			<?php echo $this->form->getLabel('float_fulltext','images'); ?>
    			<?php echo $this->form->getInput('float_fulltext','images'); ?>
    			</div>
    
    			<div  class="formelm">
    			<?php echo $this->form->getLabel('urla','urls'); ?>
    			<?php echo $this->form->getInput('urla','urls'); ?>
    			</div>
    			<div  class="formelm">
    			<?php echo $this->form->getLabel('urlatext','urls'); ?>
    			<?php echo $this->form->getInput('urlatext','urls'); ?>
    			</div>
    			<?php echo $this->form->getInput('targeta','urls'); ?>
    			<div  class="formelm">
    			<?php echo $this->form->getLabel('urlb','urls'); ?>
    			<?php echo $this->form->getInput('urlb','urls'); ?>
    			</div>
    			<div  class="formelm">
    			<?php echo $this->form->getLabel('urlbtext','urls'); ?>
    			<?php echo $this->form->getInput('urlbtext','urls'); ?>
    			</div>
    			<?php echo $this->form->getInput('targetb','urls'); ?>
    			<div  class="formelm">
    			<?php echo $this->form->getLabel('urlc','urls'); ?>
    			<?php echo $this->form->getInput('urlc','urls'); ?>
    			</div>
    			<div  class="formelm">
    			<?php echo $this->form->getLabel('urlctext','urls'); ?>
    			<?php echo $this->form->getInput('urlctext','urls'); ?>
    			</div>
    			<?php echo $this->form->getInput('targetc','urls'); ?>
    	</fieldset>
    	<?php endif; ?>
    
    	<fieldset>
    		<legend><?php echo JText::_('COM_CONTENT_PUBLISHING'); ?></legend>
    		<div class="formelm">
    		<?php echo $this->form->getLabel('catid'); ?>
    		<?php if($this->params->get('enable_category', 0) == 1) : ?>
    		<span class="category">
    		<?php echo $this->category_title; ?>
    		</span>
    		<?php else : ?>
    		<?php   echo $this->form->getInput('catid'); ?>
    		<?php endif;?>
    		</div>
    		<div class="formelm">
    		<?php echo $this->form->getLabel('created_by_alias'); ?>
    		<?php echo $this->form->getInput('created_by_alias'); ?>
    		</div>
    
    	<?php if ($this->item->params->get('access-change')): ?>
    		<div class="formelm">
    		<?php echo $this->form->getLabel('state'); ?>
    		<?php echo $this->form->getInput('state'); ?>
    		</div>
    
    		<div class="formelm">
    		<?php echo $this->form->getLabel('featured'); ?>
    		<?php echo $this->form->getInput('featured'); ?>
    		</div>
    
    		<div class="formelm">
    		<?php echo $this->form->getLabel('publish_up'); ?>
    		<?php echo $this->form->getInput('publish_up'); ?>
    		</div>
    		<div class="formelm">
    		<?php echo $this->form->getLabel('publish_down'); ?>
    		<?php echo $this->form->getInput('publish_down'); ?>
    		</div>
    
    	<?php endif; ?>
    		<div class="formelm">
    		<?php echo $this->form->getLabel('access'); ?>
    		<?php echo $this->form->getInput('access'); ?>
    		</div>
    		<?php if (is_null($this->item->id)):?>
    			<div class="form-note">
    			<p><?php echo JText::_('COM_CONTENT_ORDERING'); ?></p>
    			</div>
    		<?php endif; ?>
    	</fieldset>
    
    	<fieldset>
    		<legend><?php echo JText::_('JFIELD_LANGUAGE_LABEL'); ?></legend>
    		<div class="formelm-area">
    		<?php echo $this->form->getLabel('language'); ?>
    		<?php echo $this->form->getInput('language'); ?>
    		</div>
    	</fieldset>
    
    	<fieldset>
    		<legend><?php echo JText::_('COM_CONTENT_METADATA'); ?></legend>
    		<div class="formelm-area">
    		<?php echo $this->form->getLabel('metadesc'); ?>
    		<?php echo $this->form->getInput('metadesc'); ?>
    		</div>
    		<div class="formelm-area">
    		<?php echo $this->form->getLabel('metakey'); ?>
    		<?php echo $this->form->getInput('metakey'); ?>
    		</div>
    
    		<input type="hidden" name="task" value="" />
    		<input type="hidden" name="return" value="<?php echo $this->return_page;?>" />
    		<?php if($this->params->get('enable_category', 0) == 1) :?>
    		<input type="hidden" name="jform[catid]" value="<?php echo $this->params->get('catid', 1);?>"/>
    		<?php endif;?>
    		<?php echo JHtml::_( 'form.token' ); ?>
    	</fieldset>
    </form>
    </div>
    Code2*
    Recaptcha-php

    Code:
      <html>
        <body> <!-- the body tag is required or the CAPTCHA may not show on some browsers -->
          <!-- your HTML content -->
    
          <form method="post" action="verify.php">
            <?php
              require_once('recaptchalib.php');
              $publickey = "your_public_key"; // you got this from the signup page
              echo recaptcha_get_html($publickey);
            ?>
            <input type="submit" />
          </form>
    
          <!-- more of your HTML content -->
        </body>
      </html>
    Code3*
    components/com_content/views/form/edit.php:

    Code:
    			<button type="button" onclick="Joomla.submitbutton('article.save')">
    				<?php echo JText::_('JSAVE') ?>
    			</button>
    			<button type="button" onclick="Joomla.submitbutton('article.cancel')">
    				<?php echo JText::_('JCANCEL') ?>
    			</button>
    Code4*
    components/com_users/models/registration.php

    Code:
    // Deal with captcha
    		$captcha = $userParams->get('captcha', '0');
    		if ($captcha === '0')
    		{
    			$form->removeField('captcha');
    		}
    		else
    		{
    			$form->setFieldAttribute('captcha', 'plugin', $captcha);
    		}
    
    		parent::preprocessForm($form, $data, $group);
    	}
    Geändert von Indy (17.01.2012 um 13:43 Uhr)

  2. #2
    Neu an Board
    Registriert seit
    22.03.2011
    Beiträge
    66
    Bedankte sich
    0
    Erhielt 10 Danksagungen
    in 10 Beiträgen

    Standard

    Die Formulare werden per XML generiert.

    Öffne die Datei
    components/com_content/models/forms/article.xml

    Und füge folgendes ein:
    <field
    name="captcha"
    type="captcha"
    label="COM_USERS_REGISTER_CAPTCHA_LABEL"
    description="COM_USERS_REGISTER_CAPTCHA_DESC"
    validate="captcha"
    />

    Label und description solltest du dabei anpassen.

    In deine edit.php musst du dann an der gewünschten Stelle folgendes einfügen:

    <?php echo $this->form->getLabel('captcha'); ?>
    <?php echo $this->form->getInput('captcha'); ?>

  3. Erhielt Danksagungen von:


  4. #3
    Neu an Board
    Registriert seit
    07.05.2007
    Beiträge
    10
    Bedankte sich
    3
    Erhielt 0 Danksagungen
    in 0 Beiträgen

    Standard

    Vielen Dank, es hat funktioniert.

    Das "label" und "description" müsste ich dann entsprechend bennen. In welcher Datei nimmt man das vor? Wenn ich das richtig verstehe wird ja mit der label und description auf "COM_USERS_" verlinkt?
    Geändert von Indy (15.01.2012 um 13:11 Uhr)

  5. #4
    Neu an Board
    Registriert seit
    07.05.2007
    Beiträge
    10
    Bedankte sich
    3
    Erhielt 0 Danksagungen
    in 0 Beiträgen

    Standard

    Also ich habe jetzt "label" und desc" in der "en-GB.com_users" - Datei in
    COM_USERS_SUBMIT_CAPTCHA_LABEL="Captcha" und
    COM_USERS_SUBMIT_CAPTCHA_DESC="Zum Einsenden bitte den Code einfügen." benannt.

    Nun erscheint über dem Captcha immernoch der Code:
    COM_USERS_SUBMIT_CAPTCHA_LABEL und COM_USERS_SUBMIT_CAPTCHA_DESC (beim Mouse hover)

    Wie kann ich das in den entsprechenden Titel und der dazugehörigen Beschreibung ändern?

    Grüße
    Indy

  6. #5
    Wohnt hier Avatar von aruttkamp
    Registriert seit
    01.09.2004
    Ort
    Bergisches Land
    Alter
    56
    Beiträge
    4.447
    Bedankte sich
    284
    Erhielt 722 Danksagungen
    in 673 Beiträgen

    Standard

    Welche Sprache verwendest du im Frontend ?

  7. #6
    Neu an Board
    Registriert seit
    07.05.2007
    Beiträge
    10
    Bedankte sich
    3
    Erhielt 0 Danksagungen
    in 0 Beiträgen

    Standard

    Hallo aruttkamp,
    also ich verwende zur Zeit die Standard Sprache für die Joomla 2.5 Beta2: en-GB.ini. (Englisch)
    Die Einstellung für "COM_USERS_SUBMIT_CAPTCHA" habe ich in en-GB.com_users.ini vorgenommen.

    Grüße
    Indy

  8. #7
    Neu an Board
    Registriert seit
    22.03.2011
    Beiträge
    66
    Bedankte sich
    0
    Erhielt 10 Danksagungen
    in 10 Beiträgen

    Standard

    Du wirst passende Einträge zu den Sprachdateien für die Komponente die du modifizierst eintragen müssen. Alternativ kannst du auch direkt ins XML deutschen Text eintragen. (Geht natürlich nicht wenn du mehrere Sprachen nutzen willst)

  9. Erhielt Danksagungen von:


  10. #8
    Hat hier eine Zweitwohnung
    Registriert seit
    24.01.2006
    Beiträge
    1.010
    Bedankte sich
    156
    Erhielt 706 Danksagungen
    in 377 Beiträgen

    Standard

    Zitat Zitat von realityking Beitrag anzeigen
    Die Formulare werden per XML generiert.

    Öffne die Datei
    components/com_content/models/forms/article.xml

    Und füge folgendes ein:
    <field
    name="captcha"
    type="captcha"
    label="COM_USERS_REGISTER_CAPTCHA_LABEL"
    description="COM_USERS_REGISTER_CAPTCHA_DESC"
    validate="captcha"
    />

    Label und description solltest du dabei anpassen.

    In deine edit.php musst du dann an der gewünschten Stelle folgendes einfügen:

    <?php echo $this->form->getLabel('captcha'); ?>
    <?php echo $this->form->getInput('captcha'); ?>
    Also so machts man ja gerade mal nicht...niemals nie Coredateien anfassen...niemals nie.

    Abgesehen davon, dass reCaptcha mal wieder eine typische Joomla! Fehlentwicklung ist, wo der Anschluss verpasst wurde und anstatt dann was innovatives zu nehmen, wird eine veraltete Methode eingebaut...

  11. #9
    Neu an Board
    Registriert seit
    07.05.2007
    Beiträge
    10
    Bedankte sich
    3
    Erhielt 0 Danksagungen
    in 0 Beiträgen

    Standard

    @realityking
    Vielen Dank, hat jetzt alles geklappt.
    Nochmals Danke für die Hilfe.

  12. #10
    Neu an Board
    Registriert seit
    22.03.2011
    Beiträge
    66
    Bedankte sich
    0
    Erhielt 10 Danksagungen
    in 10 Beiträgen

    Standard

    Zitat Zitat von bembelimen Beitrag anzeigen
    Also so machts man ja gerade mal nicht...niemals nie Coredateien anfassen...niemals nie.
    Stimmt. das ganze lässt sich auch mit einem plug-in und einem layout override erreichen, das wäre aber deutlich aufwändiger zu erklären. Da der Krempel auch nicht Captcha spezifisch ist, denke ich dass die Transferleistung erwartbar ist.

    Zitat Zitat von bembelimen Beitrag anzeigen
    Abgesehen davon, dass reCaptcha mal wieder eine typische Joomla! Fehlentwicklung ist, wo der Anschluss verpasst wurde und anstatt dann was innovatives zu nehmen, wird eine veraltete Methode eingebaut...
    Hast du dich mit JCaptcha beschäftigt? Das ist mitnichten eine Lösung nur für reCaptcha sondern ein flexibles Framework mit dem man nahezu beliebige Captcha Software einbinden kann (securimage ist fast fertig, wird es aber wohl nicht mehr in 2.5.0 schaffen). Ich denke es wird in naher Zukunft auch entsprechende Plug-ins im Extension Directory geben.

Seite 1 von 2 1 2 LetzteLetzte

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein