【问题标题】:Joomla Form field type sql="....WHERE condition"?Joomla 表单字段类型 sql="....WHERE 条件"?
【发布时间】:2012-09-20 21:08:38
【问题描述】:

在 Joomla 2.5 中,如何在 SQL 查询中使用条件“WHERE”执行表单字段类型“SQL”?

例子:

<field name="catid" type="sql" query="SELECT id, title FROM #__table WHERE {condition}" />

joomla 文档中没有关于此的任何内容。我找到了这个链接,但它没有提到在 SQL 查询中使用 WHERE 条件的任何内容(http://docs.joomla.org/SQL_form_field_type)。

谁能告诉我这在 Joomla 中是否可行?

我有一张包含产品的表格和一张包含与品牌相关的商店的表格。如果我编辑一家商店,我想显示一个包含该商店品牌所有产品的组合框。那可能吗? SELECT * FROM #__products WHERE brand = {与我选择进行编辑的商店关联的品牌 ID} 这可能吗?

我可以使用自定义表单字段来做到这一点 =)

http://docs.joomla.org/Creating_a_custom_form_field_type

感谢 RHR 的回答!

【问题讨论】:

    标签: sql forms joomla components field


    【解决方案1】:

    这是我的解决方案:

    您可以通过执行以下操作完全替换查询:

    1)定义你的查询:

    $query = 'SELECT * from table_name WHERE table_id = '.$your_value;
    

    2) 更新表单字段属性:

    $this->form->setFieldAttribute('field_name', 'query', $query);
    

    【讨论】:

      【解决方案2】:

      是的,有可能

      我使用的代码

      <fields name="request">
       <fieldset name="request" >
      <field name="id" type="sql" query="SELECT id , title FROM #__table name where published=1" multiple="single" key_field="id" value_field="title" class="inputbox" label="fieldlabel" description="fielddesc" required="true" />
      </fieldset> 
      </fields>
      

      您可以通过 custom field 以其他方式执行此操作

      【讨论】:

      • 感谢您的回答。但我的问题是我可以做这样的事情吗?我有一张带有产品的桌子和一张带有与品牌相关的商店的桌子。如果我编辑一家商店,我想显示一个包含该商店品牌所有产品的组合框。那可能吗? SELECT * FROM #__products WHERE brand = {与我选择进行编辑的商店关联的品牌 ID} 这可能吗?谢谢!
      【解决方案3】:

      刚刚遇到同样的问题。经过一番挖掘,我发现它实际上是可能的。

      1.步骤 - 您需要一个自定义表单字段:(我将其命名为 vssql.php)

      JFormHelper::loadFieldClass('sql');

      class JFormFieldVSSQL extends JFormFieldSQL
      {
          /**
           * The form field type.
           */
          public $type = 'VSSQL';
      
          /**
           * Overrides parent's method
           */
          protected function getOptions()
          {
              // Get the ID
              $query_id = $this->form->getField((string) $this->element['query_id']);
      
              // Override query
              $this->element['query'] = str_replace('{query_id}', (string) $query_id->value, (string) $this->element['query']);
      
              return parent::getOptions();
          }
      }
      

      2。步骤 - 你需要知道热才能使用它:

      在你的 JForm xml 中添加:

      在您的 SQL 查询中,占位符 {query_id} 将替换为 query_id 中指定的参数的实际值,在本例中为 *user_id*。这将从分配给给定用户的某个表中返回地址列表

      【讨论】:

        【解决方案4】:

        @WooDzu 解决方案的一些更新:

        class JFormFieldICategory extends JFormFieldSQL
        {
        
            public $type = 'ICategory';
        
            /**
             * Overrides parent's method
             */
            protected function getOptions()
            {
                // Get the ID
                $cat_id = $this->form->getField((string) $this->element['cat_id']);
        
                // Override query
                $this->query = str_replace('{cat_id}', (string) $cat_id->value, (string) $this->element['query']);
                echo $this->query.' test '; //exit();
        
                return parent::getOptions();
            }
        

        }

        类型应该是公开的并且查询应该分配给$this->query。 效果很好!

        【讨论】:

          【解决方案5】:

          这在 Joomla 2.5+ 和 3.x+ 中对我有用(我用它从 #__extensions 表中选择用户插件)作为 WHERE 条件:

          <field name="plugin" type="sql" query="SELECT extension_id as value, name as title FROM #__extensions WHERE type = 'plugin' AND folder = 'user'" />
          

          【讨论】:

          • 我认为这都是关于如何在 where clausule 中使用变量。
          【解决方案6】:

          我遇到了同样的问题。您不能根据变量创建 where 条件,只能基于常量:(

          但是您可以使用 form->setField 函数更改表单字段并重新加载视图中的字段。多亏了这一点,您可以在字段 sql 中创建任何条件。

          $NewFieldDefinition=new SimpleXMLElement('<field name="catid" type="sql" query="SELECT id, title FROM #__table WHERE title='.$condition.'" />');
          $this->form->setField($NewFieldDefinition, null, true);
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-10-29
            • 2023-03-27
            • 2020-05-18
            • 1970-01-01
            • 2012-04-17
            相关资源
            最近更新 更多