【问题标题】:Install reCaptcha using php plugin in joomla K2在 joomla K2 中使用 php 插件安装 reCaptcha
【发布时间】:2012-12-26 00:11:03
【问题描述】:

我试图在 K2 前端提交表单上实现 reCaptcha。我已经下载了 PHP 库,安装了它,并且可以成功地以提交形式显示验证码图像,但最后一步让我感到困惑。我需要将该代码放入操作 php 文件中:

<?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>

【问题讨论】:

    标签: php joomla recaptcha joomla-k2


    【解决方案1】:

    如果您在管理部分工作,您可以在项目控制器的保存功能中验证验证码。 在这个文件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();
    }
    

    最好检查或尝试插件。

    希望这也会有所帮助-

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

    2) Using ReCaptcha with my custom form in Joomla

    【讨论】:

    • 谢谢你的回答,不幸的是它不起作用,在尝试失败后我删除了保存功能并尝试在没有它的情况下保存文章,它成功保存了文章,这很奇怪......
    • 对不起,我错过了“管理部分”...那么前端用户的保存功能在哪里?
    • 这里是前端/components/com_k2/controllers/item.php
    • Irfan 非常感谢你,你是我的救星,即使你对第二个位置也有错误。我将该代码放入第 52 行的 administrator\components\com_k2\models\item.php 中,它就像一个魅力:))))
    猜你喜欢
    • 2012-07-22
    • 2010-11-08
    • 2012-06-09
    • 1970-01-01
    • 2012-03-18
    • 2013-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多