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

Попросили вывести красиво дату в списке новостей

  • 18 августа 2017 г.
  • Попросили вывести красиво дату в списке новостей (да в принципе - пофиг где...)
    Сделал так (чтоб далеко не лазить) прям во вьюхе:

    Код
    echo '<div class="art-layout-cell layout-item-4" style="width: 20%; text-align: center;">';
    //вывод даты новости
    if (! empty($row['date']))
    {
    $pieces = explode(".", $row["date"]);
    echo $pieces[1].'<br/>';
    echo $pieces[2].'/'.$pieces[3];
    //var_dump ($pieces);
    }
    echo '</div>';


    С пользовательской стороны вылезает вот это:

    Цитата
    ru/useradmin/edit/?module_name=news&name=created&element_id=20&lang_id=0&type=date&rand=772&iframe=true&width=300&height=250">04
    07/2017




    Кто глубоко ковырял , подскажите пожалуйста : Как обойти этот момент в Diafan, (можно ли так во вьюхе запилить?)
    • 18 августа 2017 г.
    • Я конечно дофига спец, но там в $row['date'] точно кроме даты ничего типа тегов нет? А то я помню, что у меня описания товара var_dump`ом в браузер вроде нормально выводились, а по факту там <p></p> еще были.
      • 18 августа 2017 г. , редакция: 18 августа 2017 г.
      • Результат VAR_DUMP
        Код
        <?PHP
        echo '<div class="art-layout-cell layout-item-4" style="width: 20%; text-align: center;">';
        //вывод даты новости
        if (! empty($row['date']))
        {
        //$pieces = explode(".", $row["date"]);
        //echo $this->htmleditor($pieces[1].'<br/>'.$pieces[2].'/'.$pieces[3]);
        //var_dump ($pieces);
        var_dump ($row["date"]);
        }
        echo '</div>';

      • 18 августа 2017 г.
      • При чём ниже в другой категории те-же стринги (номера)
        • 18 августа 2017 г.
        • это var_dump ($row["date"]); так выводит пользуйтесь echo` м
          • 18 августа 2017 г.
          • Код
            echo '<pre>';
            print_r ($row["date"]);
            echo '</pre>';


            Так просто дату выводит;


            Код
            echo gettype ($row["date"]) // выдаёт string

            • 18 августа 2017 г. , редакция: 18 августа 2017 г.
            • Так а задача то в чём? Красиво вывести дату это как? Для украшательств лично я используют CSS.
              String это тип элемента массива $row["date"] если стоит задача вывести рядом с датой тип элемента массива то да используйте
              Код
              echo gettype ($row["date"]) . $row["date"]

              хотите взять в кавычки
              Код
              echo '"'. $row["date"]. '"';
              • 18 августа 2017 г. , редакция: 18 августа 2017 г.
              • Число крупно сверху
                А снизу месяц с годом с шрифом более мелким

                - задача в чтоб без ограничения для авторизированного пользователя в интерфейсе выводить без крякозябр такую дату. См самы первый скриншот
        • 18 августа 2017 г. , редакция: 19 августа 2017 г.
        • Не, ну глумишься чтоле?))) Это длина строковой переменной, в твоем случае означает, что за видимым 04.07.2017 кроется 229 символов, которые испражняются наружу, когда ты разбиваешь теги explod`ом. Перед разбиением на массив прогони переменную через strip_tags, должно помочь.
          Если уж совсем конкретно - содержимое переменной при выводе вардампом имеет смысл смотреть в выводимом коде сайта (где видны теги), а не в браузере (где они скрыты). Я так мыслю.
  • 18 августа 2017 г.
  • У меня дата выводится в немного другом формате, но вот, всё же набросал, и всё работает:
    Код

    //вывод даты новости
    if (! empty($result["date"]))
    {
    $date = explode(' ', $result["date"]);

    echo '<div class="news_date">';
    echo $date[0];
    echo '<br />' . $date[1] . ' ' . $date[2] . ' ' . $date[3];
    echo '</div>';
    }

    Подправьте под свои нужды необходимое.
    • 18 августа 2017 г.
    • Делал я так....
      Первым делом....
      В понедельник объясню что да как..
    • 21 августа 2017 г.
    • В списке новостей работает? (в каком месте на сайте)
      • 21 августа 2017 г.
      • Если вопрос ко мне, то указанный выше код пробовал на news.view.id.php.
        На списке ещё не пробовал.
      • 21 августа 2017 г.
      • Дмитрий, я нашел причину, почему у вас слетает вывод даты. И не только у вас.
        Попробуйте отключить вывод админ-панели на сайте, и сами поймёте!
        Похоже, Диафан и там, где-то с закрывающими тегами намутил.
        • 21 августа 2017 г.
        • То что там приармянивается контейнер админский к дате это я понял давно, меня интересует вопрос как сделать кастомный вывод даты даже для авторизированных пользователей не залезая дальше вьюхи...
          Думал что кто то уже сталкивался... в ТП так же предложили отключить амин панель....

          Но это какой то не правильный подход...
          • 21 августа 2017 г.
          • Думаю, если такое предложить заказчику (отключать панель), он не обрадуется.
          • 21 августа 2017 г.
          • Dmitry (afonnikov10), исключительно для Вас. Так бы промолчал, но Вам всегда помогу.
            Вместо
            Код
            $this->diafan->_('Какой-то текст')

            делайте так
            Код
            $this->diafan->_('Какой-то текст', false)


            Успехов.

            • 22 августа 2017 г.
            • Спасибо Виталий!
              - но что то и так не работает(((
              Код

              //вывод даты новости
              if (! empty($row['date']))
              {
              $pieces = explode(".", $row["date"]);
              echo $this->diafan->_($pieces[1].'<br/>'.$pieces[2].'/'.$pieces[3], false);
              }

              • 22 августа 2017 г.
              • Здесь функция
                Код
                $this->diafan->_()
                не требуется.

                Сделайте вот так
                Код
                if (! empty($row['date']))
                {
                $pieces = explode(".", $row["date"]);
                $pieces[0] = ! empty($pieces[0]) ? $pieces[0] : '';
                $pieces[1] = ! empty($pieces[1]) ? $pieces[1] : '';
                $pieces[2] = ! empty($pieces[2]) ? $pieces[2] : '';
                echo $pieces[0] . '<br />' . $pieces[1] . '/' . $pieces[2];
                }
              • 22 августа 2017 г. , редакция: 22 августа 2017 г.
              • Та-же песня...
                В вашем варианте не выводится число
                а в моём выводится (но опять же с технической информацией - адм. контейнера)
                Код

                //вывод даты новости
                if (! empty($row['date']))
                {
                $pieces = explode(".", $row["date"]);
                $pieces[1] = ! empty($pieces[1]) ? $pieces[1] : '';
                $pieces[2] = ! empty($pieces[2]) ? $pieces[2] : '';
                $pieces[3] = ! empty($pieces[3]) ? $pieces[3] : '';
                echo $pieces[1] . '<br />' . $pieces[2] . '/' . $pieces[3];
                }


              • 22 августа 2017 г.
              • Dmitry (afonnikov10), массив $pieces начинается c индекса [0], а почему Вы начинаете его с индекса [1] ???
                Покажите результаты var_dump($row['date']) и var_dump($pieces)
              • 22 августа 2017 г. , редакция: 22 августа 2017 г.
              • Видимо в этом и вся проблема (что когда выводишь с 0 - то значение пустое или идёт какое-то форматирование скриптами... ХЗ..) и дата не выводится
              • 22 августа 2017 г.
              • Еще раз, Дмитрий, покажите пожалуйста результаты var_dump($row['date']) и var_dump($pieces). Скорее всего в $row['date'] сидит не 22/08/2017, а уже отформатированная в модельке дата.
  • 22 августа 2017 г.
  • var_dump($pieces)

    array(4) { [0]=> string(54) " string(160) "ru/useradmin/edit/?module_name=news&name=created&element_id=20&lang_id=0&type=date&rand=543&iframe=true&width=300&height=250">04" [2]=> string(2) "07" [3]=> string(11) "2017" }
    • 22 августа 2017 г.
    • Код
      $d_date = strip_tags($row['date']);
      if (! empty($d_date))
      {
      $pieces = explode(".", $d_date);
      $pieces[0] = ! empty($pieces[0]) ? $pieces[0] : '';
      $pieces[1] = ! empty($pieces[1]) ? $pieces[1] : '';
      $pieces[2] = ! empty($pieces[2]) ? $pieces[2] : '';
      echo $pieces[0] . '<br />' . $pieces[1] . '/' . $pieces[2];
      }
      • 22 августа 2017 г. , редакция: 22 августа 2017 г.

      • ПРИМНОГО БЛАГОДАРЕН! =))
        • 22 августа 2017 г.
        • Поясню. Вообще такой подход классически не верный. Дело в том, что в настройках модуля определяется формат вывода даты (поле называется "Формат даты"). Поэтому в модельке модуля содержание даты заносится в массив, как отформатированное. Соответственно изменим в настройках формат вывода даты и у Вас все полетит. Вывод, необходимо в в модельке кое-что подправить.

          И так, если это модуль новостей. Берем news.model.php и заменим эти строчки
          Код
          /**
          * Форматирование данных о элементе для шаблона вне зоны кэша
          *
          * @return void
          */
          public function format_data_element(&$row)
          {
          if (! empty($row["name"]))
          {
          $row["name"] = $this->diafan->_useradmin->get($row["name"], 'name', $row["id"], 'news', _LANG);
          }
          if (! empty($row["text"]))
          {
          $row["text"] = $this->diafan->_useradmin->get($this->diafan->_tpl->htmleditor($row["text"]), 'text', $row["id"], 'news', _LANG);
          }
          if (! empty($row["anons"]))
          {
          $row["anons"] = $this->diafan->_useradmin->get($this->diafan->_tpl->htmleditor($row["anons"]), 'anons', $row["id"], 'news', _LANG);
          }
          if (! empty($row["date"]))
          {
          $row["date"] = $this->diafan->_useradmin->get($row["date"], 'created', $row["id"], 'news');
          }

          $row["tags"] = $this->diafan->_tags->get($row["id"], 'news', 'element', (! empty($row["site_id"]) ? $row["site_id"] : 0));
          $row["rating"] = $this->diafan->_rating->get($row["id"], 'news', 'element', (! empty($row["site_id"]) ? $row["site_id"] : 0));
          }

          на эти строчки
          Код
          /**
          * Форматирование данных о элементе для шаблона вне зоны кэша
          *
          * @return void
          */
          public function format_data_element(&$row)
          {
          if (! empty($row["name"]))
          {
          $row["name"] = $this->diafan->_useradmin->get($row["name"], 'name', $row["id"], 'news', _LANG);
          }
          if (! empty($row["text"]))
          {
          $row["text"] = $this->diafan->_useradmin->get($this->diafan->_tpl->htmleditor($row["text"]), 'text', $row["id"], 'news', _LANG);
          }
          if (! empty($row["anons"]))
          {
          $row["anons"] = $this->diafan->_useradmin->get($this->diafan->_tpl->htmleditor($row["anons"]), 'anons', $row["id"], 'news', _LANG);
          }
          if (! empty($row["date"]))
          {
          $row["no_format_date"] = $row["date"];
          $row["date"] = $this->diafan->_useradmin->get($row["date"], 'created', $row["id"], 'news');
          }
          else $row["no_format_date"] = false;

          $row["tags"] = $this->diafan->_tags->get($row["id"], 'news', 'element', (! empty($row["site_id"]) ? $row["site_id"] : 0));
          $row["rating"] = $this->diafan->_rating->get($row["id"], 'news', 'element', (! empty($row["site_id"]) ? $row["site_id"] : 0));
          }


          А затем уже во вьюшке делаем спокойно так (и уже не о чем не беспокоимся)
          Код
          if (! empty($row['no_format_date']))
          {
          $pieces = explode(".", $row["no_format_date"]);
          $pieces[0] = ! empty($pieces[0]) ? $pieces[0] : '';
          $pieces[1] = ! empty($pieces[1]) ? $pieces[1] : '';
          $pieces[2] = ! empty($pieces[2]) ? $pieces[2] : '';
          echo $pieces[0] . '<br />' . $pieces[1] . '/' . $pieces[2];
          }


          Да, здесь конечно надо обратить внимание в каком формате храниться дата в базе данных, можно и это предусмотреть, путем обратных преобразований. Но это уже для prodaction версий :)

Новости

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

Форум