Вставить в Breeze функцию из другого шаблона ?

Добавление новых сайтов в Movienizer. Индивидуальная настройка программы.
TerribleFloater
Superstar
Posts: 1929
Joined: Thu Feb 28, 2008 4:20 pm

Re: Вставить в Breeze функцию из другого шаблона ?

Post by TerribleFloater » Mon Jan 02, 2017 1:35 pm

Grotesque wrote: В конце файла jef_program_getmovie.pas есть ещё такая строчка:

Code: Select all

else if (tag='country') and (country>'') then info:='<tr><td class="Name">'+GetLangStr(73)+'</td><td>'+copy(country,pos(':',country)+2,length(country))+'</td></tr>'
Но я не знаю как её адаптировать... и нужно ли?
Скорее всего, не нужно: у Джефа есть темы и это используется там для вывода.

Мне кажется, проще выдрать вывод флагов не из Джефа, а из Максеза :-)
Хочу: чёрные списки, пол людей, пользовательские поля изданий.
Кинопоиск: Image ПлюсКинопоиск: Image

Grotesque
Extra
Posts: 33
Joined: Fri Jan 15, 2016 11:47 am

Re: Вставить в Breeze функцию из другого шаблона ?

Post by Grotesque » Mon Jan 02, 2017 4:38 pm

TerribleFloater wrote: Мне кажется, проще выдрать вывод флагов не из Джефа, а из Максеза :-)
А у меня такого нет. Где можно посмотреть?

TerribleFloater
Superstar
Posts: 1929
Joined: Thu Feb 28, 2008 4:20 pm

Re: Вставить в Breeze функцию из другого шаблона ?

Post by TerribleFloater » Mon Jan 02, 2017 5:00 pm

Grotesque wrote:
TerribleFloater wrote: Мне кажется, проще выдрать вывод флагов не из Джефа, а из Максеза :-)
А у меня такого нет. Где можно посмотреть?
Недалеко :-)
http://movienizer.com/forum/viewtopic.php?f=15&t=182
Хочу: чёрные списки, пол людей, пользовательские поля изданий.
Кинопоиск: Image ПлюсКинопоиск: Image

Grotesque
Extra
Posts: 33
Joined: Fri Jan 15, 2016 11:47 am

Флаги стран в шаблоне Breeze

Post by Grotesque » Mon Jan 02, 2017 6:34 pm

TerribleFloater wrote: Мне кажется, проще выдрать вывод флагов не из Джефа, а из Максеза :-)
Спасибо! Действительно оказалось очень просто! Сбылась мечта идиота!!

Если кто захочет повторить, вот как это сделал я:

Сперва добавляем функции в файл breeze_program_variables.pas

В начале документа перед списком функций (после var):

Code: Select all

ProgramOptions: TStringList;
И к общему списку функций добавляем:

Code: Select all

function GetINIIntegerValue(valuename: string; defaultvalue: integer; lowlimit: integer; highlimit: integer): integer;
var
	strTemp: string;
	iTemp: integer;
begin
	iTemp := defaultvalue;
	strTemp := '';
	
	if (ProgramOptions.Values[valuename] > '') then begin
		strTemp := ProgramOptions.Values[valuename];
	end;

	if length(strTemp) > 0 then begin
		iTemp := StrToInt(strTemp);
		if (iTemp < lowlimit) or (iTemp > highlimit) then
			iTemp := defaultvalue;
	end;

	result := iTemp;
end;
Затем в файле breeze_program_part2.pas в самом начале (после var) добавляем две строчки:

Code: Select all

CountryPicFileName, countrypic, GenrePicFileName, genrepic, MFPicFileName, MTPicFileName, SitePicFileName, sitepic, MPAAPicFileName, mpaapic: string;
iShowTextCountry, iShowTextGenre, iShowMPAA, iShowMPAAPic, iShowMPAADesc, iShowBitrate, iShowLCust1Pic, iShowLCust2Pic, iShowFCustPic, iShowDiskLabel: integer;
И чуть ниже (после begin) добавить ещё одну строчку:

Code: Select all

iShowTextCountry := GetINIIntegerValue('ShowTextCountry', 1, 0, 1);
Теперь осталось только заменить весь блок //countries (или поправить выборочно):
//countries
with sl do begin
Clear;
Add('select m.code, m.name from movies_manuals mm');
Add('join manuals m on m.code=mm.ref_code');//and m.reference=mm.reference надо ли???
Add(format('where mm.movie=%d and m.reference=9', [MovieCode]));
Add('order by m.name');
end;
RecordCount:=ExecuteSQL(sl.text);
if RecordCount>0 then begin
//'Countries: '
ThisBlockCnt := ThisBlockCnt + 1;
if (ThisBlockCnt mod 2 = 1) then
border := bckgrnd
else
border := '';
all := all + Format('<tr><td class="small-table-name"%s>%s</td><!-- <td class="middle-cell"></td> --><td
class="small-table-value"%s>', [border, GetLangStr(73), border]);
country := '';
for i:=1 to RecordCount do begin
CountryPicFileName := PicturesPath + 'flags\' + GetStringField('m.name') + '.gif';
if(MyFileExists(CountryPicFileName)) then
countrypic := format('<img src="%s" height=17 border=0 alt="%s"/>', [CountryPicFileName, GetStringField('m.name')])
else
countrypic := '';
if (iShowTextCountry = 1) or (countrypic = '') then
country:=country+format('<a href="country:%d">%s</a>&nbsp;<a href="country:%d">%s</a> <strong>/</strong> ',
[GetIntegerField('m.code'), countrypic, GetIntegerField('m.code'), GetStringField('m.name')])
else
country:=country+format('<a href="country:%d">%s</a> <strong>/</strong> ', [GetIntegerField('m.code'), countrypic]);
GetNextRecord;
end;
country := copy(country, 1, length(country) - (3 + 17));
all:=all + country + '</td></tr>';
end;


И наслаждаемся (в папке flags должны быть картинки с соответствующими названиями стран):
flags.png
Флаги в шаблоне Breeze
flags.png (758.54 KiB) Viewed 7665 times

TerribleFloater
Superstar
Posts: 1929
Joined: Thu Feb 28, 2008 4:20 pm

Re: Флаги стран в шаблоне Breeze

Post by TerribleFloater » Mon Jan 02, 2017 7:19 pm

Grotesque wrote:
TerribleFloater wrote: Мне кажется, проще выдрать вывод флагов не из Джефа, а из Максеза :-)
Спасибо! Действительно оказалось очень просто!
Наверное, можно ещё проще — если показывать флаги всегда, то очень много не нужно:
Grotesque wrote:Сперва добавляем функции в файл breeze_program_variables.pas

В начале документа перед списком функций (после var):

Code: Select all

ProgramOptions: TStringList;
И к общему списку функций добавляем:

Code: Select all

function GetINIIntegerValue(valuename: string; defaultvalue: integer; lowlimit: integer; highlimit: integer): integer;
<…>
end;
Это всё просто занимается опциями скрипта.
Grotesque wrote:Затем в файле breeze_program_part2.pas в самом начале (после var) добавляем две строчки:

Code: Select all

CountryPicFileName, countrypic, GenrePicFileName, genrepic, MFPicFileName, MTPicFileName, SitePicFileName, sitepic, MPAAPicFileName, mpaapic: string;
iShowTextCountry, iShowTextGenre, iShowMPAA, iShowMPAAPic, iShowMPAADesc, iShowBitrate, iShowLCust1Pic, iShowLCust2Pic, iShowFCustPic, iShowDiskLabel: integer;
От этого списка новых переменных за флаги отвечают лишь две первых. Остальные переменные и так есть (возможно, под другими именами). А может быть, и нет — если оранж и бриз не настраивали выводы битрейтов и всяких прочих рейтингов.
Grotesque wrote:И чуть ниже (после begin) добавить ещё одну строчку:

Code: Select all

iShowTextCountry := GetINIIntegerValue('ShowTextCountry', 1, 0, 1);
А это лишь чтение той самой настройки.

И заменяем, конечно

Code: Select all

		if (iShowTextCountry = 1) or (countrypic = '') then
на

Code: Select all

 		if countrypic = '' then
Хочу: чёрные списки, пол людей, пользовательские поля изданий.
Кинопоиск: Image ПлюсКинопоиск: Image

Grotesque
Extra
Posts: 33
Joined: Fri Jan 15, 2016 11:47 am

Re: Вставить в Breeze функцию из другого шаблона ?

Post by Grotesque » Mon Jan 02, 2017 10:07 pm

Эх, вот бы кто ещё помог сделать то же самое для страницы человека!.. :roll:

TerribleFloater
Superstar
Posts: 1929
Joined: Thu Feb 28, 2008 4:20 pm

Re: Вставить в Breeze функцию из другого шаблона ?

Post by TerribleFloater » Tue Jan 03, 2017 12:04 am

Grotesque wrote:Эх, вот бы кто ещё помог сделать то же самое для страницы человека!.. :roll:
А там даже проще: страна берётся из места рождения, без всякого запроса.

Code: Select all

info:=birthplace;
					while (pos(',',info)>0) do delete(info,1,pos(',',info));
					info:=ClearExtraBlankCharacters(info);
То есть удаляем из места рождения всё до последней запятой — остаток и считаем страной рождения.
Дальше по той же схеме: ищем одноимённый файл. Если находим — добавляем картинку.
Хочу: чёрные списки, пол людей, пользовательские поля изданий.
Кинопоиск: Image ПлюсКинопоиск: Image

Grotesque
Extra
Posts: 33
Joined: Fri Jan 15, 2016 11:47 am

Re: Вставить в Breeze функцию из другого шаблона ?

Post by Grotesque » Tue Jan 03, 2017 9:28 am

TerribleFloater wrote: А там даже проще: страна берётся из места рождения, без всякого запроса.

Code: Select all

info:=birthplace;
					while (pos(',',info)>0) do delete(info,1,pos(',',info));
					info:=ClearExtraBlankCharacters(info);
Это код из Джефа. Он и так флаги людей показывает (хоть и не в этом поле). Мне надо, чтобы Breeze показывал флаг в поле "Место рождения", но не пойму как к этому применить всё написанное выше.

Это из Бриза:

Code: Select all

if birthplace<>'' then begin
			ThisBlockCnt := ThisBlockCnt + 1;
			if (ThisBlockCnt mod 2 = 1) then
				border := bckgrnd
			else
				border := '';
			//Location of birth
			tmp:=tmp + '<tr><td class="big-table-name"' + border + Format('>%s</td><!-- <td class="middle-cell"></td> --><td class="big-table-value"', [GetLangStr(287)])+ border + '>';
			s := birthplace;
			i := Pos(', ', s);
			while i > 0 do begin
				s2 := copy(s, 1, i-1);
				delete(s, 1, i+1);
				tmp := tmp + Format('<a href="userref:200,%s">%s</a>, ', [s2, s2]);
				i := Pos(', ', s);
			end;
			tmp := tmp + Format('<a href="userref:200,%s">%s</a>', [s, s]);
			tmp := tmp + '</td></tr>';
		end;

TerribleFloater
Superstar
Posts: 1929
Joined: Thu Feb 28, 2008 4:20 pm

Re: Вставить в Breeze функцию из другого шаблона ?

Post by TerribleFloater » Tue Jan 03, 2017 10:28 am

Grotesque wrote:
TerribleFloater wrote: А там даже проще: страна берётся из места рождения, без всякого запроса.

Code: Select all

info:=birthplace;
					while (pos(',',info)>0) do delete(info,1,pos(',',info));
					info:=ClearExtraBlankCharacters(info);
Это код из Джефа. Он и так флаги людей показывает (хоть и не в этом поле).
Конечно, из Джефа — именно потому, что он флаги показывает :-) То, что он их показывает в другом поле, неважно. Важно то, что Джеф в месте рождения выбирает именно последнее слово или словосочетание в качестве страны, а Бриз разбивает место рождения по запятым. То есть если человек родился в "Москва, Россия", в Бризе можно будет собрать и тех, кто родился в России, и тех, кто родился в Москве. Но флаг Бриз не показывает: он просто не знает, что последнее в месте рождения и есть страна.
Поэтому в ту процедуру Бриза, что занимается выводом страницы человека, добавляем три переменных:

Code: Select all

CountryPicFileName, countrypic, country: string;
Возможно, переменная country уже объявлена, я не проверял. Она нужна именно для названия страны. Можно в принципе задействовать любую временную переменную, потом её обнулив (ту же tmp, например). Но это всегда немного опасно.
Когда процедура доходит до

Code: Select all

         s := birthplace;
, перед ней пишем примерно так:

Code: Select all

country:=birthplace;
					while (pos(',',country)>0) do delete(country,1,pos(',',country));
					country:=ClearExtraBlankCharacters(country);
		CountryPicFileName := PicturesPath + 'flags\' + country + '.gif';
		if(MyFileExists(CountryPicFileName)) then
			countrypic := format('<img src="%s" height=17 border=0 alt="%s"/>', [CountryPicFileName, country)])
		else
			countrypic := '';
И затем по накатанной дорожке, как в странице фильма: после сбора всех мест нужно проверить на countrypic = '':

Code: Select all

         tmp := tmp + '</td></tr>';
      end;
      if countrypic = '' then else tmp := tmp + countrypic;
Примерно так, я в самом коде не проверял :-)
Хочу: чёрные списки, пол людей, пользовательские поля изданий.
Кинопоиск: Image ПлюсКинопоиск: Image

Post Reply