2013-01-11 44 views
0

我試圖在K2前端子表單上實現reCaptcha。我已經下載了PHP庫,安裝了它並可以成功地以submition形式顯示capcha圖像,但最後一步讓我感到困惑。我需要把這些代碼形成行動php文件:在joomla中使用php插件安裝reCaptcha K2

<?php 
    require_once(JPATH_SITE.'/libraries/recaptcha/recaptchalib.php'); 
    $privatekey = "MY PRIVATE KEY"; 
    $resp = recaptcha_check_answer ($privatekey, 
           $_SERVER["REMOTE_ADDR"], 
           $_POST["recaptcha_challenge_field"], 
           $_POST["recaptcha_response_field"]); 

    if (!$resp->is_valid) { 
    // What happens when the CAPTCHA was entered incorrectly 
    die ("The reCAPTCHA wasn't entered correctly. Go back and try it again." . 
     "(reCAPTCHA said: " . $resp->error . ")"); 
    } else { 
    alert(0); 
    } 
    ?> 

的問題是,操作文件恰好是index.php出於某種原因。如果我只是把那段代碼放在那裏,主頁停止加載警告,我錯過了驗證碼鍵。我將在下面發佈我的K2frontend php文件,希望你能幫助我,因爲這對我來說是非常重要的功能。

<?php 
defined('_JEXEC') or die('Restricted access'); 

$document = & JFactory::getDocument(); 
$document->addScriptDeclaration(" 
    Joomla.submitbutton = function(pressbutton){ 
     if (pressbutton == 'cancel') { 
      submitform(pressbutton); 
      return; 
     } 
     if (\$K2.trim(\$K2('#title').val()) == '') { 
      alert('".JText::_('K2_ITEM_MUST_HAVE_A_TITLE', true)."'); 
     } 
     else if (\$K2.trim(\$K2('#catid').val()) == '0') { 
      alert('".JText::_('K2_PLEASE_SELECT_A_CATEGORY', true)."'); 
     } 
     else { 
      syncExtraFieldsEditor(); 
      \$K2('#selectedTags option').attr('selected', 'selected'); 
      submitform(pressbutton); 
     } 
    } 
"); 

?> 
<div id="overallholderarticle" style="overflow:hidden;"> 

<form action="index.php" enctype="multipart/form-data" method="post" name="adminForm" id="adminForm"> 
    <?php if($this->mainframe->isSite()): ?> 
    <div id="k2FrontendContainer"> 
     <div id="k2Frontend" style="background: url('<?php echo JURI::base(); ?>templates/<?php echo $template; ?>/images/bg_windows_bright_noise.png');"> 
      <div id="k2FrontendEditToolbar"> 
       <div class="titenewseditor"> 
        <?php echo (JRequest::getInt('cid')) ? JText::_('K2_EDIT_ITEM') : JText::_('Добавить новость'); ?> 
       </div> 
      </div> 
      <div class="clr"></div> 
      <?php if(!$this->permissions->get('publish')): ?> 
      <div id="k2FrontendPermissionsNotice"> 
       <p><?php echo JText::_('K2_FRONTEND_PERMISSIONS_NOTICE'); ?></p> 
      </div> 
      <?php endif; ?> 
      <?php endif; ?> 
      <div id="k2ToggleSidebarContainer"> <a href="#" id="k2ToggleSidebar"><?php echo JText::_('K2_TOGGLE_SIDEBAR'); ?></a> </div> 
      <table cellspacing="0" cellpadding="0" border="0" class="adminFormK2Container"> 
       <tbody> 
        <tr> 
         <td> 
          <table class="adminFormK2"> 
           <tr> 
            <td class="adminK2LeftCol"> 
             <label for="title"><?php echo JText::_('K2_TITLE'); ?></label> 
.......................... 
.........CODE HERE........ 
.......................... 

      </table> 
      <div class="clr"></div> 
      <?php if($this->mainframe->isSite()): ?> 
     </div> 
    </div> 
    <!--BOTTOM ACTION BUTTONS--> 
    <div id="k2Frontend"> 
     <!--reCAPCHA--> 
     <?php 
     require_once(JPATH_SITE.'/libraries/recaptcha/recaptchalib.php'); 
     $publickey = "MY PUBLIC KEY"; 
     echo recaptcha_get_html($publickey); 
     ?> 
      <table class="k2FrontendToolbar" cellpadding="2" cellspacing="4"> 
       <tr> 
        <td id="toolbar-save" class="button"> 
         <a class="toolbar" href="#" onclick="javascript: submitbutton('save'); return false;"> <span title="<?php echo JText::_('K2_SAVE'); ?>" class="icon-32-save"></span> <?php echo JText::_('K2_SAVE'); ?> </a> 
        </td> 
        <td id="toolbar-cancel" class="button"> 
<a class="toolbar" href="#" onclick="javascript:history.go(-1)"> <span title="<?php echo JText::_('K2_CANCEL'); ?>" class="icon-32-cancel"></span> <?php echo JText::_('K2_CLOSE'); ?> </a> 
</td> 
       </tr> 
      </table> 
    </div> 
    <?php endif; ?> 
</form> 
</div> 

回答

2

如果您在管理部分工作您可以在項目控制器的保存功能中驗證驗證碼。 在此文件中administrator/components/com_k2/controllers/item.php檢查以下功能並添加代碼。

function save() { 
JRequest::checkToken() or jexit('Invalid Token'); 
//add library and captcha validation code here 
$model = & $this->getModel('item'); 
$model->save(); 
} 

最好檢查或嘗試插件。

希望這將有助於too-

1)How to use joomla recaptcha plugin to my custom Module

2)Using ReCaptcha with my custom form in Joomla

+0

THX u爲答案,不幸的是它不工作,失敗後atempts我刪除保存功能和tryed保存沒有它的文章,它成功保存文章,多數民衆贊成在奇怪的... –

+0

對不起,我錯過了部分「管理部分」...所以wheres是前端用戶的保存功能? –

+0

這裏的前端/components/com_k2/controllers/item.php – Irfan