Перейти к содержимому
Открыть в приложении

Удобный способ просмотра. Узнать больше.

Дизайн и модификация Invision Community

Полноэкранное приложение на главном экране с push-уведомлениями, медалями и многим другим.

Чтобы установить это приложение на iOS и iPadOS
  1. Нажмите иконку «Поделиться» в Safari
  2. Прокрутите меню и нажмите На экран «Домой».
  3. Нажмите Добавить в правом верхнем углу.
Чтобы установить это приложение на Android
  1. Нажмите меню из трёх точек (⋮) в правом верхнем углу браузера.
  2. Нажмите Добавить на главный экран или Установить приложение.
  3. Подтвердите, нажав Установить.
Русский язык для Invision Community 5

Не корректно наследуется мод "Спасибо" из родительского стиля (v2.3.6)

Доброго времени суток!

Немного предистории: достался в администрирование форум (forum.acmilanfan.ru) с некоторым количеством предустановленных модов.

Проблема возникла с модом "Спасибо".

На родительском стиле (elegancesimple) мод работает корректно. По нажатию на количество "спасибок" отображается новая страница с хистори, кто и за что сказал спасибо.

Есть второй скин, дочерний от elegancesimple - в нем мод работает корректно, за исключением той части, где вызывается тот самый хистори.

Ошибку выдает следующего характера:

Fatal error: Call to a member function start_nav() on a non-object in /var/www/forum/www/sources/classes/class_display.php on line 117

полез в class_display - start_nav прописан. В шаблонах тоже все ок.

Вручную сверил изменяемые файлы в шаблонах - вроде все идентично.

 

Можете подсказать, в каком направлении искать этот баг??

 

 

Спасибо!

Изменено пользователем by_marat

Рекомендованные сообщения

Вероятно, дочерний шаблон переопределен, поэтому наследование не происходит. Нужно вручную править.

Проверьте еще раз изменения вручную.... Возможно, входящие переменные забыли добавть.

  • Автор

а входящие переменные вообще наследуются от родительского скина?

в качестве эксперимента, установил другой и скин и назначил родительский.

Точно такая же ошибка.

к сожалению, в php не силен, знания ограничиваются только "здесь не хватает точки с запятой" и простым сравнением кусков кода.

 

Если обратить внимание на код из class_display:

 

$nav  = $this->ipsclass->compiled_templates['skin_global']->start_nav();

       $nav .= "<a href='{$this->ipsclass->base_url}act=idx'>{$this->ipsclass->vars['board_name']}</a>";


       if ( empty($output_array['OVERRIDE']) )
       {
		if ( isset($output_array['NAV']) AND is_array( $output_array['NAV'] ) )
		{
			foreach ($output_array['NAV'] as $n)
			{
				if ($n)
				{
					$nav .= "<{F_NAV_SEP}>" . $n;
				}
			}
		}
       }

       $nav .= $this->ipsclass->compiled_templates['skin_global']->end_nav();

 

то меня смущает

 

['skin_global']

 

Возможно, что дочерний шаблон на попадает под это действите??

то меня смущает

А что вас смущает, skin_global это группа глобальных шаблонов.

 

а входящие переменные вообще наследуются от родительского скина?

Если наследуется шаблон значит наследуется все. У вас ошибка говорит именно о том, что такого шаблона нету в скине нету, и нужно создать вручную.

 

 

установил другой и скин и назначил родительский.

Точно такая же ошибка.

Вероятно, дочерний шаблон переопределен, поэтому наследование не происходит. Нужно вручную править.

  • Автор

не совсем корректно выразился.

есть скин, в котором все работает.

Установил абсолютно новый, скин и назначил родительским тот - который работает.

Если верить теории - то в новом скине, все должно работать как часы. Но нет, опять выскакивает такая же ошибка.

 

Или же моя логика не верная и недостающие шаблоны не присваиваются новую стилю?

Не все как часы.

Повторяю.

Если в новом шаблоне есть переопределенные шаблоны, они не могут наследовать...

Вообще-то это ошибка не из-за отсутствия шаблона, а потому что вызывается метод не инициированного объекта, и кроется она не в class_display.php а где-то в другом месте. Не понятно только почему на дефолтном работает.

 

Откройте /sources/components_public/thanks.php

Есть там такие строчки?

	if( !is_object( $this->ipsclass->compiled_templates['skin_global'] ) ) 
	{
		$this->ipsclass->load_template( 'skin_global' );
	}

 

или хотябы

		$this->ipsclass->load_template( 'skin_global' );

  • Автор

thanks.php вообще оказался в action_public/

 

есть строчка

$this->ipsclass->load_template( 'skin_global' );

 

перенес в /components_public/

 

не помогло

thanks.php вообще оказался в action_public/

Надо было там оставить, наверное я о другом моде говорю или у меня не полный. По вашей ссылки файл должен быть там.

  • Автор

+-------------------------------------------------------------------------------
|  Thanks v2.1.x
| =============================================================================
|  by AVol (http://www.ibresource.ru/forums/index.php?showuser=41059)
| =============================================================================
|  function "thanks_add" based on Thanks by Unlovelt
| =============================================================================
+-------------------------------------------------------------------------------

*/

 

меня тоже больше всего смущает, что на дефолтном то все работает..

А кэши новых скинов у вас пишутся вообще? Перекешировать этих "наследователей" получается? :)

  • Автор

да, с этим все ок.

В качестве эксперимента прописывал другой мод, в родительском скине - дочка получила все изменения автоматически.

  • Автор

сверил все шаблоны ручками - все ок. Везде одинаковые значения прописаны.

Что еще можно проверить?

1. Отменить дочерность и ставить как обычный скин. Все кастомные шаблоны перенести вручную.

2. Проверить версию скина, соответствует ли она версии форума.

 

Что проверить? Проверить все, начиная с того, почему не грузится группа глобальных шаблонов на этом скине. http://www.phpfaq.ru/debug

  • Автор

и еще немного помучаю вопросами.

Рандомно, по вызову хистори, стала появляться уже другая ошибка:

 

Fatal error: Call to a member function pagination_next_link() on a non-object in /var/www/forum/www/sources/ipsclass.php on line 4196

 

и если честно - голова уже идет круго.

То же самое что и предыдущая ошибка.

Создайте аккаунт или войдите в него для комментирования

Аккаунт

Навигация

Поиск

Поиск

Настроить push-уведомления браузера

Chrome (Android)
  1. Нажмите на иконку замка рядом с адресной строкой.
  2. Нажмите Права доступа -> Уведомления.
  3. Измените свои настройки.
Chrome (компьютер)
  1. Нажмите на иконку замка в адресной строке.
  2. Выберите Настройки сайта.
  3. Найдите Уведомления и измените свои настройки.