Предупреждения (warning) после установки PhocaGallery

0 Пользователей и 1 Гость просматривают эту тему.
  • 10 Ответов
  • 533 Просмотров
*

bdv1983

  • Захожу иногда
  • **
  • 12
  • 0
Здравствуйте.
На своем компьютере с Windows 7 разрабатываю внутренний сайт предприятия. Поставил Joomla 3.6.5, на нее PhocaGallery v4.3.4. Сразу же после установки открывается панель управления с кучей предупреждений такого типа:
Warning: Illegal string offset 'name' in C:\Aache24\htdocs\administrator\components\com_phocagallery\libraries\phocagallery\render\renderinfo.php on line 3
Все предупреждения на третьей строке в файле renderinfo.php. В чем может быть дело? Может быть что-то не включено в настройках PHP или Apache?

*

SeBun

  • Практически профи
  • *******
  • 3081
  • 187
  • @SeBun48
А что там, в этой строке 3? Обращение к элементу массива? Предполагаю, что при вызове в массиве нет ключа 'name'.
Оказываю услуги по Joomla | Миграция на Joomla 3.x | Администрирование | Разработка
Ник занят

*

bdv1983

  • Захожу иногда
  • **
  • 12
  • 0
Код
$xml_items[$key] = $value;
- на этой операции предупреждения выводятся.
Судя по именам переменных, о которых сообщается (name, type, creationDate, author, copyright, authorEmail, authorURL, version, description, group, filename) и названии функции, где эта операция выполняется (getPhocaVersion), сообщения выдаются при попытке сообщить информацию об используемой версии галереи.

*

SeBun

  • Практически профи
  • *******
  • 3081
  • 187
  • @SeBun48
Странная строка, если вы взяли ее из оригинального файла. К сожалению, нет возможности скачать и посмотреть галерею, но эта конструкция должна иметь примерно такой вид:
Код: php
$xml_items['name'] = 'Phoca Gallery';

Смотрите, что там перед этой строкой, возможно, явно нужно задать ключ 'name' массива и его значение.
Оказываю услуги по Joomla | Миграция на Joomla 3.x | Администрирование | Разработка
Ник занят

*

bdv1983

  • Захожу иногда
  • **
  • 12
  • 0
Привожу полный текст процедуры с описанными предупреждениями:
Код
function getPhocaVersion() {
   $folder = JPATH_ADMINISTRATOR .DS. 'components/com_phocagallery';
   if (JFolder::exists($folder)) {
      $xmlFilesInDir = JFolder::files($folder, '.xml$');
   } else {
      $folder = JPATH_SITE .DS. 'components/com_phocagallery';
      if (JFolder::exists($folder)) {
         $xmlFilesInDir = JFolder::files($folder, '.xml$');
      } else {
         $xmlFilesInDir = null;
      }
   }
   $xml_items = '';
   if (count($xmlFilesInDir)) {
      foreach ($xmlFilesInDir as $xmlfile){
         if ($data = JApplicationHelper::parseXMLInstallFile($folder.DS.$xmlfile)) {
            foreach($data as $key => $value) {
               $xml_items[$key] = $value;
            }
         }
      }
   }
   if (isset($xml_items['version']) && $xml_items['version'] != '' ) { return $xml_items['version'];
   } else { return ''; } }
}
Я, конечно, пока не большой знаток PHP, но по-моему строка:
Код
$xml_items = '';
переменную $xml_items очищает от всех данных. Поэтому неудивительно, что при обращении к элементу массива затем происходит предупреждение, в других языках это вообще была бы ошибка. А для PHP это что правильно так писать?

*

SeBun

  • Практически профи
  • *******
  • 3081
  • 187
  • @SeBun48
Не совсем. В самом начале там прописан путь к каталогу компонента. Далее скрипт его пытается открыть и прочитать. $xml_items = ''; - эта строка создает пустую строковую переменную $xml_items. Это неверно, т.к. далее по коду в эту переменную заносится массив. Должно быть так: $xml_items = array();- такая конструкция создает пустой массив. Ну а далее идет загрузка XML в массив. Затем проверяется, есть ли в массиве ключ 'version' и если да, возвращается его значение.  Что то я тут 'name' без очков не вижу...
Оказываю услуги по Joomla | Миграция на Joomla 3.x | Администрирование | Разработка
Ник занят

*

bdv1983

  • Захожу иногда
  • **
  • 12
  • 0
Видимо $key последовательно принимает значения 'name', 'type', 'creationDate' и т. д.

*

SeBun

  • Практически профи
  • *******
  • 3081
  • 187
  • @SeBun48
Видимо $key последовательно принимает значения 'name', 'type', 'creationDate' и т. д.
Не последовательно. Это массив, в который из $data заносятся пары ключ=значение. Поставьте под циклом var_dump($xml_items); и увидите его содержимое.
« Последнее редактирование: 16.02.2017, 19:35:28 от SeBun »
Оказываю услуги по Joomla | Миграция на Joomla 3.x | Администрирование | Разработка
Ник занят

*

bdv1983

  • Захожу иногда
  • **
  • 12
  • 0
Замена
Код
$xml_items = '';
на
Код
$xml_items[$key] = $value;
исключила вывод предупреждений при открытии панели управления Phoca, спасибо SeBun. Однако, создал категорию, попробовал добавить фотографию и появились новые предупреждения, на другие уже переменные. Мне, что теперь и для них исходный код галереи изменять? Может рассмотреть какую-то более разработанную галерею?

*

SeBun

  • Практически профи
  • *******
  • 3081
  • 187
  • @SeBun48
Я советовал заменить на
Код: php
 $xml_items = array(); 
Оказываю услуги по Joomla | Миграция на Joomla 3.x | Администрирование | Разработка
Ник занят

*

bdv1983

  • Захожу иногда
  • **
  • 12
  • 0
Я советовал заменить на
Код: php
 $xml_items = array(); 
Да, конечно, описка. Прошу прощения.