Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Изменение типа переменной

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
squirr
Отправлено: 02 Декабря, 2016 - 15:21:07
Post Id



Новичок


Покинул форум
Сообщений всего: 3
Дата рег-ции: Июнь 2012  
Откуда: Москва


Помог: 0 раз(а)




Прошу помочь в решении проблемы.

На страницу с динамическим контентом выводятся материалы — статьи. У статей есть заголовок. Статьи можно объединять в циклы; при этом заголовок принимает вид:
Заголовок. Подзаголовок. Часть n
В CMS заголовок вводится в одно текстовое поле по шаблону:
Заголовок. Часть n. Подзаголовок
Разделители — точки.
Заголовок — переменная %name%.
Подзаголовок — переменная %subname%.
Номер части цикла статей — переменная %peace%.

Из-за того, что переменная, отвечающая за номер части статьи имеет строковый тип данных, нумерация статей нарушается, если их более 9 в цикле. Получается: Часть 1 — Часть 10 — Часть 2 и т. д.

Как добиться нумерации в правильном порядке? Понимаю, что надо изменить тип данных переменной, но не понимаю, как это сделать в текущей реализации.

Вёрстка в шаблоне:

CODE (html):
скопировать код в буфер обмена
  1. <div class = "col-md-12 hidden-xs snTitle snScaledTitle">
  2.             <div class = "col-xs-12 col-sm-10 col-sm-offset-1 col-lg-10 col-lg-offset-1">
  3.                 <div class = "col-lg-12 col-lg-offset-0 col-xs-8 col-xs-offset-2 snDateTime">
  4.                     <img src = "/admin/materialtemplate/images/clock.png" alt = "">
  5.                     <span>{%createdate%}</span>
  6.                 </div>
  7.                 <div class = "col-xs-12">
  8.                     <p>{%name%}</p>
  9.                 </div>
  10.                 <div class = "col-xs-12">
  11.                     <p class = "snSubTitle">{%subname%}</p>
  12.                 </div>
  13.                 <div class = "col-xs-12">
  14.                     <ul class = "snMaterialParts">
  15.                         {%peace%}
  16.                     </ul>
  17.                 </div>
  18.             </div>
  19.         </div>


Код:

PHP:
скопировать код в буфер обмена
  1. $mat_class =  AD::model('material');
  2. $filter = new $mat_class(1);
  3. $data = $filter->ById($aid);
  4. $data_pieces = $filter->getCycleOfArticles($data['NAME']);
  5.  
  6. $sendata = array();
  7. $alname =explode('.', $data['NAME']);
  8.  
  9. $sendata['name'] =$alname[0];
  10.     $sendata['subname'] = strlen($alname[2]) > 3 ? $alname[2] : $alname[1];
  11.     $sendata['peace'] = '';
  12.     if($data_pieces){
  13.         foreach ($data_pieces as $dp) {
  14.             if ( $dp['SEL'] == 'Y') {
  15.                 $dst = ' class="active"';
  16.                 $al1 = '';
  17.                 $al2 = '';
  18.             } else {
  19.                 $al1 = '<a href="'.$dp['LINK'].'">';
  20.                 $al2 = '</a>';
  21.                 $dst  ='';
  22.             }
  23.  
  24.             $sendata['peace'] .= '<li '.$dst.' >'.$al1.' ' . $dp['NAME'] . ' '.$al2.'</li>';
  25.         }
  26.     }
 
 Top
nooblamer
Отправлено: 02 Декабря, 2016 - 20:05:42
Post Id


Новичок


Покинул форум
Сообщений всего: 18
Дата рег-ции: Нояб. 2016  


Помог: 0 раз(а)




squirr так объявляется строковая переменная: $var = ''; так цифровая: $var = 0;

Код этого метода еще покажите getCycleOfArticles

(Отредактировано автором: 02 Декабря, 2016 - 20:09:44)

 
 Top
Строитель Модератор
Отправлено: 02 Декабря, 2016 - 20:19:53
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




squirr, отсортируйте массив $data_pieces перед циклом.
 
 Top
squirr
Отправлено: 03 Декабря, 2016 - 16:03:41
Post Id



Новичок


Покинул форум
Сообщений всего: 3
Дата рег-ции: Июнь 2012  
Откуда: Москва


Помог: 0 раз(а)




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

Строитель, спасибо за совет. Написал перед циклом foreach метод krsort($data_pieces); и сортировка стала правильной. Больше ничего не менял. То есть получилось следующее:
PHP:
скопировать код в буфер обмена
  1. $sendata = array();
  2.     $alname =explode('.', $data['NAME']);
  3.     $arDateTime=explode(".", explode(' ', $data['DATE_ACTIVE_FROM'])[0]);
  4.    
  5.     $sendata['createdate'] = $arDateTime[0].' '.$arMonths[intval($arDateTime[1])-1].' '.$arDateTime[2];
  6.  
  7.     $sendata['name'] =$alname[0];
  8.     $sendata['subname'] = strlen($alname[2]) > 3 ? $alname[2] : $alname[1];
  9.     $sendata['peace'] = '';
  10.     if($data_pieces){
  11.         krsort($data_pieces);
  12.         foreach ($data_pieces as $dp) {
  13.             if ( $dp['SEL'] == 'Y') {
  14.                 $dst = ' class="active"';
  15.                 $al1 = '';
  16.                 $al2 = '';
  17.             } else {
  18.                 $al1 = '<a href="'.$dp['LINK'].'">';
  19.                 $al2 = '</a>';
  20.                 $dst  ='';
  21.             }
  22.  
  23.             $sendata['peace'] .= '<li '.$dst.' >'.$al1.' ' . $dp['NAME'] . '&nbsp;'.$al2.'</li>';
  24.         }
  25.     }


Правильно я вас понял?
 
 Top
Строитель Модератор
Отправлено: 03 Декабря, 2016 - 18:58:27
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




squirr, да ) Работает ведь теперь так, как вам было нужно?
 
 Top
squirr
Отправлено: 05 Декабря, 2016 - 16:49:36
Post Id



Новичок


Покинул форум
Сообщений всего: 3
Дата рег-ции: Июнь 2012  
Откуда: Москва


Помог: 0 раз(а)




Строитель пишет:
squirr, да ) Работает ведь теперь так, как вам было нужно?

Да, так. Единственное, в чём есть опасения — сортировка работает по ключу, а не по значению. А я не знаю, что в данном случае является ключом, и не понимаю, где это можно проверить. По идее, ключом должен служить ID элемента (то есть статьи), и в этом случае ошибки быть не должно, так как мы публикуем материалы всегда последовательно.
 
 Top
Строитель Модератор
Отправлено: 05 Декабря, 2016 - 20:58:22
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




squirr, в php функций для сортировки массивов не мало. Посмотрите в мануале, и при необходимости замените на аналог, сортирующий по значениям, а не по ключам. А чтобы посмотреть "внутрь" массива, воспользуйтесь функцией var_dump()
PHP:
скопировать код в буфер обмена
  1.  echo '<pre>';
  2.  var_dump($array);
  3.  echo '</pre>';

(Отредактировано автором: 05 Декабря, 2016 - 20:59:31)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB