2015-10-14 6 views
1

У меня есть два поля в моем модуле: rules_name_c, который является текстовым полем и rules_author_c, который является полем связи.Условное обязательное поле

Эти поля не являются обязательными для заполнения, однако, когда я ввожу данные в поле rules_name_c, я хотел бы сделать так, чтобы rules_author_c был заполнен для завершения записи.

Я попытался следующие:

<?php 
$dependencies['conn_connection']['required_author'] = array(
    'hooks' => array("edit"), 
    'trigger' => 'true', //Optional, the trigger for the dependency. Defaults to 'true'. 
    'triggerFields' => array('rules_name_c'), 
    'onload' => true, 
    //Actions is a list of actions to fire when the trigger is true 
    'actions' => array(
     array(
      'name' => 'SetRequired', 
      //The parameters passed in will depend on the action type set in 'name' 
      'params' => array(
       'target' => 'rules_author_c', 
       'label' => 'rules_author_c_label', 
       'value' => 'not(equal($rules_name_c, ""))', 
      ), 
     ), 
    ), 
); 
?> 

Я считаю, что это решение не будет работать, как это возможно только функции при редактировании записи. Это верно?

Я также попытался с помощью:

<?php 

require_once('include/MVC/View/views/view.edit.php'); 
/* 
* replace UT_Blogs with the module your are dealing with 
*/ 

class conn_connectionViewEdit extends ViewEdit { 

    public function __construct() { 
     parent::ViewEdit(); 
     $this->useForSubpanel = true; // this variable specifies that these changes should work for subpanel 
     $this->useModuleQuickCreateTemplate = true; // quick create template too 
    } 

    function display() { 

     global $mod_strings; 
     //JS to make field mendatory 
     $jsscript = <<<EOQ 
        <script> 
         // Change rules_author_c to the field of your module 
         $('#rules_name_c').change(function() { 
          makerequired(); // onchange call function to mark the field required 
         }); 
        function makerequired() 
        { 
         var status = $('#rules_name_c').val(); // get current value of the field 
         if(status != ''){ // check if it matches the condition: if true, 
           addToValidate('EditView','rules_author_c','varchar',true,'{$mod_strings['LBL_RULES_AUTHOR']}'); // mark rules_author_c field required 
           $('#description_label').html('{$mod_strings['LBL_RULES_AUTHOR']}: <font color="red">*</font>'); // with red * sign next to label 
          } 
          else{ 
           removeFromValidate('EditView','rules_author_c');      // else remove the validtion applied 
           $('#rules_author_c_label').html('{$mod_strings['LBL_RULES_AUTHOR']}: '); // and give the normal label back 
          } 
        } 
        makerequired(); //Call at onload while editing a Published blog record 
       </script> 
EOQ; 
     parent::display(); 
     echo $jsscript;  //echo the script 
    } 

} 
+0

Используйте javascript для того, чтобы установить это обязательное поле Вы не можете делать это, используя php. – ErasmoOliveira

+0

Я пробовал использовать код, который я только что добавил, и это не работает ни – BillyMichael

ответ

1

Я написал этот яваскрипт функцию и в дальнейшем я использую его с JQuery:

function lxValidateCRMfield(form_name, field_name, label, validate, fnCallerName = "") { 
    fnCallerName = (fnCallerName != "") ? "(Function " + fnCallerName + ")" : ""; 
    if (validate) { 
     console.log("lxValidateCRMfield adding validation on form " + form_name + " to field " + field_name, fnCallerName); 
     //addToValidate is defined somewhere on suitecrm 
     addToValidate(form_name, field_name, 'varchar', true, "Falta campo requerido: " + label); 
     $('#' + field_name + '_label').html(label + ': <font color="red">*</font>'); 
    } else { 
     console.log("lxValidateCRMfield removing validation on form " + form_name + " to field " + field_name, fnCallerName); 
     //removeFromValidate is defined somewhere on suitecrm 
     removeFromValidate(form_name, field_name); 
     $('#' + field_name + '_label').html(label + ': '); 
    } 
} 

Затем вы вызываете его на форме необходимо (с помощью ваши поля он может выглядеть следующим образом):

// List all forms available 
console.log(document.forms); 
// select one you need 
var form_name = 'EditView'; eg: EditView, DetailView, search_form 
var module = 'YourModule'; // eg: Opportunities 

var crmEditView = document.forms[form_name]; 
if (crmEditView.module.value == module) { 
    if ($('#rules_name_c').val() != '') { 
     lxValidateCRMfield(form_name, 'rules_author_c', 'Author', true, 'optionalNameOfFunctionYourCallingThis'); 
    } else { 
     lxValidateCRMfield(form_name, 'rules_author_c', 'Author', false, 'optionalNameOfFunctionYourCallingThis'); 
    } 
} 

Я надеюсь, что это помогает
С уважением

 Смежные вопросы

  • Нет связанных вопросов^_^