0

セット A (フィールド 1、フィールド 2) とセット B (フィールド 3、フィールド 4) の 2 つのフィールド セットがあります。

  • Field1 は、ユーザーの選択に従って Mariadb tableA からデータをロードし、対応するデータを tableA から Field2 にロードします。これを行うために、1-2.php という名前の .php ファイルが使用されます。Field1 と Field2 は問題なく動作しますが、次のようになります。

セット A の問題: フロント エンドの要素の検査 -> コンソールに Field2 のすべてのデータが表示されます。

  • Field3 は、ユーザーの選択に従って Mariadb tableB からデータをロードし、対応するデータを tableB から Field4 にロードします。これを実現するために、3-4.php という名前の .php ファイルが使用されます。Field3 は tableB から正常にロードされますが、次のようになります。

セット B の問題: フィールド 4 には何も表示されません。

*注 tableA と tableB の構造は同じです

1. セット A (フィールド 1 とフィールド 2)

Field1->Actionscript->Custom->Change:

function ff_field1_action(element, action)
{
    switch (action) {
        case 'change':
            jQuery.ajax({
                type: "POST",
                url: "http://someurl/1-2.php",
                data: { field1: element.value },    
                success: function(data) {
                var obj = JSON.parse(data);
                        jQuery('#ff_elem2496').empty();
                       var arr = obj;
                           jQuery('#ff_elem2496').append(jQuery('<option>', {
                                value: '',
                                text: 'whatever'
                            }));
                       for (var i = 0; i < arr.length; i++) { 
                           console.log(arr[i]);
                           jQuery('#ff_elem2496').append(jQuery('<option>', {
                                value: arr[i],
                                text: arr[i]
                            })); 
                        }
                }      
            });
            break;
        default:;
    } // switch
} // ff_field1_action

注: elem2496 は Field2 を指します

セット A の 1-2.php ファイル:

<?php
define('_JEXEC', 1);
if (file_exists(__DIR__ . '/defines.php'))
{
    include_once __DIR__ . '/defines.php';
}
if (!defined('_JDEFINES'))
{
    define('JPATH_BASE', __DIR__);
    require_once JPATH_BASE . '/includes/defines.php';
}
require_once JPATH_BASE . '/includes/framework.php';
$judgePick1 = JRequest::getVar(field1);
$db1 = JFactory::getDbo();
$query1 = $db1->getQuery(true);
$query1
  ->select('x.name')
  ->from($db1->quoteName('#__tableA', 'x'))
  ->join('LEFT', $db1->quoteName('#__tableA', 'y') . ' ON ' . $db1->quoteName('x.parent') .' = '. $db1->quoteName('y.id'))
  ->where($db1->quoteName('y.name') .' = '. $db1->quote($judgePick1))
  ->andWhere(array($db1->quoteName('x.parent').' = '. $db1->quoteName('y.id'), $db1->quoteName('x.active').' = 1'), $glue = 'AND')
  ->order($db1->quoteName('x.name') . ' ASC');
$db1->setQuery($query1);
$result1 = $db1->loadColumn();
 if(!$result1){
    echo "error";
} else {
    echo json_encode($result1);
}
?>

2. セット B (フィールド 3 とフィールド 4)

Field3->Actionscript->Custom->Change:

function ff_field3_action(element, action)
{
    switch (action) {
        case 'change':
            jQuery.ajax({
                type: "POST",
                url: "http://someurl/3-4.php",
                data: { field3: element.value },    
                success: function(data) {
                var obj = JSON.parse(data);
                        jQuery('#ff_elem3871').empty();
                       var arr = obj;
                           jQuery('#ff_elem3871').append(jQuery('<option>', {
                                value: '',
                                text: 'whatever2'
                            }));
                       for (var i = 0; i < arr.length; i++) { 
                           console.log(arr[i]);
                           jQuery('#ff_elem3871').append(jQuery('<option>', {
                                value: arr[i],
                                text: arr[i]
                            })); 
                        }
                }      
            });
            break;
        default:;
    } // switch
} // ff_field3_action

注: elem3871 は Field4 を指します

セット B の 3-4.php ファイル:

<?php
define('_JEXEC', 1);
if (file_exists(__DIR__ . '/defines.php'))
{
    include_once __DIR__ . '/defines.php';
}
if (!defined('_JDEFINES'))
{
    define('JPATH_BASE', __DIR__);
    require_once JPATH_BASE . '/includes/defines.php';
}
require_once JPATH_BASE . '/includes/framework.php';
$judgePick2 = JRequest::getVar(field3);
$db2 = JFactory::getDbo();
$query2 = $db2->getQuery(true);
$query2
  ->select('x.name')
  ->from($db2->quoteName('#__tableB', 'x'))
  ->join('LEFT', $db2->quoteName('#__tableB', 'y') . ' ON ' . $db2->quoteName('x.parent') .' = '. $db2->quoteName('y.id'))
  ->where($db2->quoteName('y.name') .' = '. $db2->quote($judgePick2))
  ->andWhere(array($db2->quoteName('x.parent').' = '. $db2->quoteName('y.id'), $db2->quoteName('x.active').' = 1'), $glue = 'AND')
  ->order($db2->quoteName('x.name') . ' ASC');
$db2->setQuery($query2);
$result2 = $db2->loadColumn();
if(!$result2){
    echo "error";
} else {
    echo json_encode($result2);
}
?>

最後に、[フォーム] -> [詳細設定] -> [その他のオプション] -> [フォーム ピース] -> [フォームの前] で:

// Set A 
$this->execPieceByName('ff_InitLib'); //Include BreezingForms Library
$db1 = JFactory::getDBO();//Get Database Object
$db1->setQuery('SELECT name FROM #__tableA WHERE parent=0 AND active=1 ORDER BY id ASC');
$result1 = $db1->loadColumn(); //load the result from the query
$res1 = "0;whatever;0\n";
for ($i = 0; $i < count($result1); $i++)
{
     $res1 .= "0;".$result1[$i].";".$result1[$i]."\n";
}
 function ff_setSelectList1($name, $value)
{
     global $ff_processor;
     for ($r = 0; $r < $ff_processor->rowcount; $r++)
     {
          $row =& $ff_processor->rows[$r];
          if ($row->name==$name)
          $row->data2 = $value;
          unset($row);
     } // for
} // ff_setSelectList1
 ff_setSelectList1('field1', $res1);

// Set B 
$this->execPieceByName('ff_InitLib'); //Include BreezingForms Library
$db2 = JFactory::getDBO();//Get Database Object
$db2->setQuery('SELECT name FROM #__tableB WHERE parent=0 AND active=1 ORDER BY id ASC');
$result2 = $db2->loadColumn(); //load the result from the query
$res2 = "0;whatever2;0\n";
for ($i = 0; $i < count($result2); $i++)
{
     $res2 .= "0;".$result2[$i].";".$result2[$i]."\n";
}
function ff_setSelectList2($name, $value)
{
     global $ff_processor;
     for ($r = 0; $r < $ff_processor->rowcount; $r++)
     {
          $row =& $ff_processor->rows[$r];
          if ($row->name==$name)
          $row->data2 = $value;
          unset($row);
     } // for
} // ff_setSelectList2
ff_setSelectList2('field3', $res2);
4

0 に答える 0