Вход • Регистрация

Название товара в форму обратной связи в категориях магазина

  • 11 сентября 2013 г.
  • Здравствуйте, коллеги.

    Кто знает, как выцепить название товара на странице категории (shop_view_list.php) и поместить в форму обратной связи?
    Есть товары в категории, и кнопка Заказать вызывающая обратную связь: http://screenshot.su/show.php?img=0e8e42afd63aad13f920fe3c12ddbfe1.jpg
    Организовано вот так - в shop_view_list.php.добавил:

    echo '<a class="zakazat" href="#zakaz" rel="prettyphoto">Заказать</a>';

    и

    echo '<div style="display: none;" id="zakaz"><div class="zakaz">';
    $this->htmleditor('<insert name="show_form" module="feedback" template="shop" site_id="34">');
    echo '</div></div>';

    Так же в feedback.view_form_shop.php добавил :

    case 'text':
    case "email":
    $value = ($row["id"] == 9 ? $this->diafan->titlemodule : '');
    echo '<div class="infofield">'.$row["name"].($row["required"] ? '<font color="red">*</font>' : '').':</div>
    <input type="text" name="p'.$row["id"].'" size="40" value="'.$value.'" class="inptext">';
    break;

    Для карточки товара такой подход работает, т.к. в тайтле выводится название товара. А вот для категории - нет. Как бы подцепить название товара из базы и засунуть в форму обратки?
    • 11 сентября 2013 г.
    • Зачем вам дёргать с базы? Используйте jqerry. Ловите клик на кнопке заказать и выдёргивайте его название из дом модели, загоняйте в переменную и вставляйте куда угодно, хоть в тайтл, хоть в форму.
    • 11 сентября 2013 г. , редакция: 11 сентября 2013 г.
    • Я бы делал не так.
      Я бы для формы сделал в шаблонном теге прием еще одной переменной:
      Код
      <insert name="show_form" module="feedback" template="shop" site_id="34" good_id="3452">

      Для этого надо в modules/feedback/feedback.php эту переменную разрешить:
      Код
      public function show_form($attributes)
      {
      $attributes = $this->get_attributes($attributes, 'site_id', 'template', 'good_id');

      Далее в modules/feedback/feedback.model.php ее принимать в функции
      Код
      public function form($site_id = 0, $good_id = 0; $insert_form = false)

      Затем в теле модели запросик на выдергивание названия товара
      Код
      if ($good_id<>0)
      {
      $this->result["good"] = DB::title("shop", $good_id, "name"); //помещаем название товара в резалт, для передачи во вьюху
      }

      А в modules/feedback/views/feedback.view.form.php уже с переменной $row["good"] можно делать что угодно. Или ее в созданное поле формы прибавлять для отправки, или просто к тексту сообщения строкой прилеплять.

      Используется эта универсальная конструкция просто:
      В цикле, где выводятся товары из категории вызывать форму
      Код
      echo '<div style="display: none;" id="zakaz"><div class="zakaz">';
      $this->htmleditor('<insert name="show_form" module="feedback" template="shop" site_id="34" good_id="'.$row["id"].'">');
      echo '</div></div>';

      Собственно и в карточке товара вызывать также, только не $row["id"], а там $this->diafan->show будет товар
      • 11 сентября 2013 г.
      • Решил попробовать сделать как Вы сказали, но в итоге форма выводится без полей, только кнопка отправки. В чём может быть дело?
        • 11 сентября 2013 г.
        • Смотря куда Вы код вставили в модели :) Скорее всего поломали там чего. Я вообще не проверял, чисто по памяти написал.
          Включите режим разработчика, посмотрите, на что система ругается.
          • 11 сентября 2013 г.
          • Удивительно, но система ни на что не ругается, просто не выводит и всё.
            В вашем коде поправил public function form($site_id = 0, $good_id = 0; $insert_form = false) заменил на ,
            Изменил ($good_id<>0) на (! $good_id<>0)

            Вставил в модели в 88 строку, после всех условий.
  • 11 сентября 2013 г.
  • Форма успешно вывелась после изменения последовательности на public function form($site_id = 0, $insert_form = false, $good_id = 0) .
    Теперь осталась ошибка Undefined index: good ( http://screenshot.su/show.php?img=f36825e6191fb9e97227d56068434d02.jpg ) .
    В 116 строке выводится echo '<h1>'.$row["good"].'</h1>';

    Цитата
    Зачем?


    Не силён в PHP, поэтому трудно ориентироваться в .model , обычно правлю вьюхи.
    • 12 сентября 2013 г.
    • Цитата
      Теперь осталась ошибка Undefined index: good ( http://screenshot.su/show.php?img=f36825e6191fb9e97227d56068434d02.jpg )
      . Это означает, что в массиве $row нет good.
      Цитата
      В 116 строке выводится echo '<h1>'.$row["good"].'</h1>';

      А она выводится внутри цикла?
      Код
      foreach ($result["rows"] as $row)


      Хотя что Вы мне голову морочите? Я ошибся, а Вы не поправите даже!
      $result["good"] конечно надо использовать, а не $row["good"]/
      .
      Мы же сами ее в $this->result["good"] засунули в модели!
      • 12 сентября 2013 г.
      • Строка public function form($site_id = 0, $insert_form = false, $good_id = 0) походу устанавливает $good_id равной 0, из-за чего условие if ($good_id<>0) не срабатывает и вылазит ошибка, указанная постом выше.

        Если условие убрать - ошибок нет. Но т.к. значение $good_id равно 0, соответственно название товара не выводится.

Новости

  • 18 июня
  • В сборке большое обновление demo-шаблона, дополнительная защита от спама, улучшение YML-импорта и еще много важного и интересного.
  • 24 апреля
  • В новой сборке совершили революцию в структурировании кастомизированной информации в шаблонах, добавили авторегистрацию пользователей, усовершенствовали защиту от спама, актуализировали накопительную скидку, а также улучшили производительность и стабильность работы системы.
  • 12 января
  • После выхода сборки 7.1 мы выпустили уже три патча, в каждом из которых улучшаем административную часть сайта. Сборка DIAFAN.CMS 7.1.3 уже доступна к установке. 

Форум