2017-02-01 4 views
2

Я пытаюсь создать текстовый фильтр в моем Magento сайте, в основном у меня есть форма с текстовым полем и кнопки отправкой следующим образом:Слова с PHP

<form id="answer_form_<?php echo $id;?>" class="form" method="post" 
action="<?php echo Mage::getUrl('productquestions/productquestions/saveanswers',array('product_questions_id'=>$id));?>"> 

<textarea id="txt_send" class="input-text required-entry " name="content" 
id="answer_content_<?php echo $id;?>" title="Content"></textarea> 

<button id="btn_send" style="float: left;" type="submit" class="button" 
title="Send Message"><span><span><?php echo $this->__('Send Message') ?></span></span></button> 

</form> 

Что мне нужно сделать, это отфильтруйте слова из текстового поля, когда форма отправлена ​​до, она сохраняется в базе данных, поэтому я создал некоторые php-функции и адаптировал их. Окончательный код:

function wordFilter($text) {  
    $filter_terms = array('\bass(es|holes?)?\b','\bshit(e|ted|ting|ty|head)\b'); 
    $filtered_text = $text; 

    foreach($filter_terms as $word) { 
     $match_count = preg_match_all('/' . $word . '/i', $text, $matches); 

     for($i = 0; $i < $match_count; $i++) { 
     $bwstr = trim($matches[0][$i]); 
     $filtered_text = preg_replace('/\b' . $bwstr . '\b/', str_repeat("*", strlen($bwstr)), $filtered_text); 
    } 

    } 
    return $filtered_text; 
} 

if(isset($_POST['btn_send'])) { 
    $text = htmlentities($_POST['txt_send']); 

    $text = wordFilter($text); 
} 

Я просто добавил два слова для испытания до сих пор, и когда я делаю текст с обоими словами он сохраняется, как правило, не изменяя их «*****». Я избегал использования JS, поскольку это клиентская сторона.

Может ли кто-нибудь сказать мне, что мне не хватает?

Спасибо!

EDITED:

Как плагин Magento. Действие перенаправляет форму на: productquestions/productquestions/saveanswers',array('product_questions_id'=>$id)); и в зависимости от идентификатора изменяет URL-адрес. В качестве примера: siteurl/index.php/productquestions/productquestions/saveanswers/product_questions_id/40 на этой странице контроллера У меня есть функция:

public function saveanswersAction() 
    { 
     $answers = $this->getRequest()->getPost(); 
     $answerCollection = array(); 
     $model = Mage::getModel('productquestions/answers'); 
     $id = $this->getRequest()->getParam('product_questions_id'); 

     $model->setData('product_questions_id',$id); 
     $model->setData('answers',$answers['content']); 

     $model->save(); 
     $answerCollection[] = $model; 

    } 

ответ

2

Это немного трудно быть уверенным, как вы не включают в себя код, в котором это делает сохранение, но это выглядит, как вы не экономить результат вашей функции фильтра обратно в переменную, которая будет сохранена. Try:

if(isset($_POST['btn_send'])) { 
    $text = htmlentities($_POST['txt_send']); 
    $text = wordFilter($text); 
    //Code to save $text here 
} 
+0

отредактировано, спасибо! –

0

Просто переместил код в контроллер и он работал, спасибо за подсказку.

$text = $this->getRequest()->getParam('content'); 
     $filter_terms = array('\bass(es|holes?)?\b','\bshit(e|ted|ting|ty|head)\b'); 
     $filtered_text = $text; 
     foreach($filter_terms as $word) 
     { 
      $match_count = preg_match_all('/' . $word . '/i', $text, $matches); 
      for($i = 0; $i < $match_count; $i++) 
      { 
        $bwstr = trim($matches[0][$i]); 
        $filtered_text = preg_replace('/\b' . $bwstr . '\b/', str_repeat("*", strlen($bwstr)), $filtered_text); 
      } 
     } 

$model->setData('answers',$filtered_text); 
Смежные вопросы