OctoberCMS: Ajax Обработчик - PullRequest
0 голосов
/ 10 марта 2020

Я создал плагин с помощью Builder.

Есть 2 модели:

  • Поставщик
  • Местоположение

Я пытается создать 3 независимых фильтра во внешнем интерфейсе, чтобы пользователи могли фильтровать список поставщиков по имени и их местоположению.

Это моя модель поставщика

<?php namespace JacobFeeley\Matrix\Models;

use Model;

/**
 * Model
 */
class Provider extends Model
{
    use \October\Rain\Database\Traits\Validation;

    use \October\Rain\Database\Traits\SoftDelete;

    protected $dates = ['deleted_at'];


    /**
     * @var string The database table used by the model.
     */
    public $table = 'jacobfeeley_matrix_providers';

    /**
     * @var array Validation rules
     */
    public $rules = [
    ];

    public $jsonable = [
        'contacts',
        'courses'
    ];

    public $belongsTo = [
        'location' => 'JacobFeeley\Matrix\Models\Location'
    ];

    public function scopeApplyTitle($query, $title)
    {
        return $query->where('title', $title);
    }

    public function scopeApplyLocation($query, $location)
    {
        return $query->where('location', $location);
    }

}

Модель моего местоположения

<?php namespace JacobFeeley\Matrix\Models;

use Model;

/**
* Model
*/
class Location extends Model
{
      use \October\Rain\Database\Traits\Validation;

      use \October\Rain\Database\Traits\SoftDelete;

      protected $dates = ['deleted_at'];


      /**
       * @var string The database table used by the model.
       */
      public $table = 'jacobfeeley_matrix_locations';

      /**
       * @var array Validation rules
       */
      public $rules = [
      ];

      public $hasMany = [
          'providers' => 'JacobFeeley\Matrix\Models\Providers',
          'courses' => 'JacobFeeley\Matrix\Models\Courses'
      ];

      public function scopeApplyTitle($query, $title)
      {
          return $query->where('title', $title);
      }

      public function scopeApplyProvider($query, $provider)
      {
          return $query->where('provider', $provider);
      }

    }
}

Теперь я могу использовать это в качестве примера, чтобы получить список всех провайдеров в Лондоне:

Provider::applyLocation('London')->get();

Что я не знаю, как это сделать, это заполнить 2 выпадающих списка веб-интерфейса

  • Первый со всеми провайдерами
  • Второй со всеми локациями

Вот мой компонент

<form>

    <div class="form-group row">

        <div class="form-group col-md-4">
            <select data-request="" class="form-control s2">
                <option selected disabled>Select Provider</option>

            </select>
        </div>

        <div class="form-group col-md-4">
            <select data-request="" class="form-control s2">
                <option selected disabled>Select Location</option>

            </select>
        </div>

        <div class="form-group col-md-4">
            <select data-request="" class="form-control s2">
                <option selected>Select Course</option>

            </select>
        </div>

    </div>

</form>

Буду признателен, если кто-нибудь сможет помоги мне с кодом

1 Ответ

2 голосов
/ 11 марта 2020

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

<form>

    <div class="form-group row">

        <div id="providers" class="form-group col-md-4">
            {% partial "@providers" %}
        </div>

        <div id="locations" class="form-group col-md-4">
            {% partial "@locations" %}
        </div>

        <div class="form-group col-md-4">
            <select data-request="" class="form-control s2">
                <option selected>Select Course</option>

            </select>
        </div>

    </div>

</form>

Частицы providers.htm:

<select data-request="onSelectProvider" class="form-control s2">
    <option selected disabled>Select Provider</option>
{% for provider in providers %}
    <option value="{{ provider.id }}">{{ provider.name }}</option>
{% endfor %}
</select>

И locations.htm:

<select data-request="onSelectLocation" class="form-control s2">
    <option selected disabled>Select Location</option>
{% for location in locations %}
    <option value="{{ locations.id }}">{{ locations.name }}</option>
{% endfor %}
</select>

Конечно вам нужно будет адаптировать имена полей в ссылочных моделях, поскольку у меня нет деталей вашей реализации.

...