2017-01-03 1 views
4

Как говорится в заголовке, у меня проблема с падением, которое я сделал. Он содержит список стран, в которые магазин может отправить. Он может создать регион доставки, дать ему имя и затем выбрать все страны, которые попадают под этот регион. затем добавить к нему цену.Распространение в разбивке по странам

Во время проверки я хочу получить список стран, предоставленный веб-магазином, и использовать его, чтобы клиент мог выбрать, где он живет. Вариантами для страны являются те, в которых магазин также отправляет свою продукцию. Однако я столкнулся с некоторыми проблемами.

Основная проблема заключается в том, что способ, которым он был сконструирован, заключается в том, что вы выбираете регион, который будет выполнять перезагрузку страницы с дополнительным параметром в URL-адресе, который добавит регион доставки к заказу, который будет создан. Это вызывает у меня проблему. Поскольку он всегда будет выбирать нижний вариант раскрывающегося списка, а не тот, который я только что выбрал, это означает, что я не могу установить, в какой стране живет человек.

так, если раскрывающийся

США
Китай

и я выбираю США страница перезагружается, и Китай будет парил

Мой код:

Dropdown HTML

{% for shippingRegion in store.getShippingRegions %} 
    <a style="display: none" id="addShippingRegion{{shippingRegion.id}}" href="{{ path('checkout', {'store_id': store.id, 'shippingRegion': shippingRegion.id}) }}"></a> 
{% endfor %} 

<div class="collection"> 
    <select onchange="shippingRegionSelectCheck(this)" class="browser-default" id="shippingRegion" name="ShippingRegion"> 
      <option selected disabled>Select a shipping region</option> 
       {% for key,country in regionCountries %} 
        {% for c in country %} = 
        <option id="countrySelect" data-id="{{key}}" selected value="{{c}}" >{{c}}</option> 
        {% endfor %} 
      {% endfor %} 
     </select> 
</div> 

Функция Javascript перезагрузки страницы

function shippingRegionSelectCheck(regionSelect){ 
    if(regionSelect){ 
     var selected = $('#shippingRegion').find('option:selected'); 
     var extra = selected.data('id'); 
     var country = $('#shippingRegion').val('value'); 
     var href = $('#addShippingRegion' + extra).attr('href'); 

     window.location.href = href; 
    } 

} 

Entity
/** 
* @ORM\Entity 
* @ORM\Table(name="Shipping_Regions") 
*/ 
class ShippingRegion{ 
    public function __construct() { 
     $this->shipping_weight_prices = new ArrayCollection(); 
     $this->shipping_amount_prices = new ArrayCollection(); 
    } 

    /** 
    * @ORM\Column(type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    protected $id; 

    /** 
    * @ORM\Column(type="string", length=100, nullable=true) 
    */ 
    protected $name; 

    /** 
    * @ORM\Column(type="boolean", nullable=true) 
    */ 
    protected $regionType; 

    /** 
    * @ORM\Column(type="array", nullable=true) 
    */ 
    protected $regionCountry; 

ответ

1

Так что причина, по которой я застряла, была частично из-за моего собственного беспорядка. То, что я сделал, чтобы исправить это, дало странам собственный идентификатор, чтобы его можно было использовать в HTML и JS для обновления используемых данных. Используя параметр nullable с именем cId для установки на маршруте и использования его данных. Надеюсь, что этот ответ поможет другим в будущем

/** 
    * @Route("/checkout/{store_id}/{shippingRegion}/{cId}", name="checkout", defaults={"shippingRegion" = null, "cId" = null}) 
    */ 
    public function showAction($store_id, $shippingRegion, $cId, Request $request) 

страны, предоставляющие свои собственные ID

foreach ($webstore->getShippingRegions() as $shippingRegions) { 
      foreach ($shippingRegions->getRegionCountry() as $key=>$regionCountry) { 
// key being the ID used for countries 
        $regionCountries[$shippingRegions->getId()][$key] = Intl::getRegionBundle()->getCountryName($regionCountry); 
      } 
    } 

прутик из выпадающего списка:

{% for key,country in regionCountries %} 
    {% for id,c in country %} 
     {% if shippingRegionEntity is defined and shippingRegionEntity is not null and key == shippingRegionEntity.getId and cId is defined and cId is not null and cId == id %} 
     <option id="countrySelect" data-cId="{{id}}" selected checked data-id="{{key}}" >{{c}}</option> 
     {% else %} 
     <option id="countrySelect" data-cId="{{id}}" data-id="{{key}}" >{{c}}</option> 
     {% endif %}          
    {% endfor %} 
{% endfor %} 

и, наконец, JS я использовал, чтобы обновить страница и загрузить данные:

function shippingRegionSelectCheck(regionSelect){ 
    if(regionSelect){ 
     var selected = $('#shippingRegion').find('option:selected'); 
     var extra = selected.data('id'); 
     var country = selected.attr('data-cId'); 

     var href = $('#addShippingRegion' + extra).attr('href')+ '/' + country; 
     window.location.href = href; 

    } 

} 
1

Может быть, это потому, что вы «выбрали» написано в каждой опции, так что браузер выбирает последний.

<option id="countrySelect" data-id="{{key}}" {{ c == selected_country ? 'selected' }} value="{{c}}" >{{c}}</option> 
+0

, что эхм .. может быть, если это я дам вам знать. Благодаря! – KevinTheGreat

+0

Используя это, я перехожу к ошибке Переменная «selected_country» не существует в webstore \ checkout.html.twig в строке 187 – KevinTheGreat

+0

Вам нужно будет получить эту переменную как-то. Если «страна» находится в запросе в качестве параметра (например, http://example.com/regions?country=USA), вы можете получить этот параметр: '{{c == app.request. get ('страна')? 'selected'}} '. – Travis

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

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