Инструменты пользователя

Инструменты сайта


foobar2000:tagz:tutorial:create_columns

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
foobar2000:tagz:tutorial:create_columns [2006/05/21 09:13]
Mishail
foobar2000:tagz:tutorial:create_columns [2017/11/05 12:26] (текущий)
VEG старая версия восстановлена (2006/09/02 05:42)
Строка 14: Строка 14:
 В большинстве столбцов мы должны делать различия между композициями принадлежащими полным альбомам (с этого момента я буду называть их '​альбомными трэками'​) и отдельными композициями (отдельными трэками). Задача скрипта будет такая: //Если работаем с альбомным трэком,​ то делаем то-то. Если же работаем с отдельным трэком,​ делаем другое//​. Конечно же для этого лучше всего подойдет конструкция ''​if''​ В большинстве столбцов мы должны делать различия между композициями принадлежащими полным альбомам (с этого момента я буду называть их '​альбомными трэками'​) и отдельными композициями (отдельными трэками). Задача скрипта будет такая: //Если работаем с альбомным трэком,​ то делаем то-то. Если же работаем с отдельным трэком,​ делаем другое//​. Конечно же для этого лучше всего подойдет конструкция ''​if''​
    
-<​html><​code>​$if(<​b>​$get_global(isAlbum)</​b><br+<​html><​pre class="​code">​$if(<​b>​$get_global(isAlbum)</​b>​ 
- ,<br> + , 
-// Tasks for album tracks go here<br> +// Tasks for album tracks go here 
-,<br> +
-// Tasks for single tracks go here<br> +// Tasks for single tracks go here 
-)</code></​html>​+)</pre></​html>​
  
 Обратите внимание на часть выделенную жирным шрифтом. Т.к. разделение альбомный/​отдельный трэк нам нужно повсеместно,​ то самым ​ эффективным решением будет выполнить такой запрос только один раз, сохранив его результат в глобальной переменной и в дальнейшем просто использовать эту переменную там где необходимо. Это спасает нас от перепечатывания одних и тех же строк снова и снова, и делает скрипт быстрее,​ потому что запрос фактически выполняется только один раз. Обратите внимание на часть выделенную жирным шрифтом. Т.к. разделение альбомный/​отдельный трэк нам нужно повсеместно,​ то самым ​ эффективным решением будет выполнить такой запрос только один раз, сохранив его результат в глобальной переменной и в дальнейшем просто использовать эту переменную там где необходимо. Это спасает нас от перепечатывания одних и тех же строк снова и снова, и делает скрипт быстрее,​ потому что запрос фактически выполняется только один раз.
Строка 74: Строка 74:
  
 Код из секции track 1 так же является нашим первым примером использования вложенных выражений,​ когда второе выражение ''​$if()''​ является частью //​иначе//​ первого ''​$if()''​. Как это можно перевести:​ //Если используемый кодек называется ‘ATSC A52’, отобразить более понятное ‘dolby digital ac3'. Иначе выолнить вторую команду if: Проверить наличие поля ''​lame_version''​ и отобразить ‘lame’. Если же такого поля нет, использовать то что выдаст ''​%codec%''//​. И этим мы завершаем 1-ю строку альбома. Код из секции track 1 так же является нашим первым примером использования вложенных выражений,​ когда второе выражение ''​$if()''​ является частью //​иначе//​ первого ''​$if()''​. Как это можно перевести:​ //Если используемый кодек называется ‘ATSC A52’, отобразить более понятное ‘dolby digital ac3'. Иначе выолнить вторую команду if: Проверить наличие поля ''​lame_version''​ и отобразить ‘lame’. Если же такого поля нет, использовать то что выдаст ''​%codec%''//​. И этим мы завершаем 1-ю строку альбома.
 +
 +Вторая строка начинается с трех знаков пробела,​ служащих для отступа в плэйлисте. ''​$if2()''​ ищет и показывает тэг ''​%album artist%''​ (и снова не забываем про подстановку полей) или, если Ваши файлов не имеют правильных тэгов, строку ‘no-artist’. То же самое происходит и на 3-й строке,​ но уже с тэгом album.
 +
 +Строка 4 содержит информацию о номере диска и дате релиза. И в первую очередь мы отображаем значение поля ''​%disc%'',​ используя квадратные скобки для тоо чтобы выводить значение только в случае если это поле присутствует,​ и отображаем,​ к примеру,​ //Disc 1//. Затем идет ''​$tab()'',​ которое вставляет знак табуляции,​ используемый для выравнивания текста в столбце. Это работает так:
 +
 +  выравнивание по левому краю $tab() выравнивание по правому краю
 +  выравнивание по левому краю $tab() выравнивание по центру $tab() выравнивание по правому краю
 +
 +Теперь для многодисковых альбомов мы выводим информацию о диске на левой стороне столбца,​ за этой информацией идет выравненный по правому краю последующий текст. Для однодисковых альбомов эта колонка пуста, не считая трех отступов (знаков пробела).
 +
 +
 +Далее наступает время ''​$if2()''​ позаботиться об отображении даты. В первую очередь мы проверяем наличие тэга album date и отображаем его, если он есть. Напомню что тэг album date используется в сборниках,​ когда дата выхода отдельного трэка отличается от даты выхода альбома (сборника). если же данный тэг не найден,​ то отображается тэг date, но, благодаря квадратным скобкам,​ опять же, только в том случае если этот есть в файле.
 +
 +Ну вот мы и подошли к 5-й строке. В общем-то я даже не знаю что про нее сказать :-) Просто напросто закрывающая скобка для нашего выражения,​ начатого на строке 1. Вот, собственно,​ и все для отображения в режиме альбома в этом столбце. Полностью это выглядит так:
 +
 +  $if($get_global(isAlbum)
 +  ,
 +  // --- Album view ---
 +  $select(%tracknumber%,​
 +  // Track 1
 +  $if($strcmp(%codec%,'​ATSC A/​52'​),'​dd_ac3',​
 +  $if($info(lame_version),'​lame',​
 +  $lower(%codec%)
 +  ))
 +  ' album {',
 +  // Track 2
 +  ' ​  '​$if2(%album artist%,'<​no artist>'​),​
 +  // Track 3
 +  ' ​  '​$if2(%album%,'<​no album>'​),​
 +  // Track 4
 +  ' ​  '​['​Disc '​%disc%$tab()]$if2(%album date%,​[%date%])$tab(),​
 +  // Track 5
 +  '​}'​
 +  ),
 +  // --- Single view ---
 +  [%artist%]
 +  )
 +
 +===== Столбец Tracknumber =====
 +
 +Создайте новый столбец,​ назовите его **#**, устновите ширину (**Width**) равную **30** пикселей и выравнивание по центру (**Alignment** равное **Centre**). В этом столбце будет отображаться номер трэка для альбомов,​ для одиночных трэков мы ничего не будем отображать. Скрипт предельно прост
 +
 +  $if($get_global(isAlbum),​
 +  $ifgreater(%tracknumber%,​9,​
 +  %tracknumber%,​
 +  '​0'​$num(%tracknumber%,​1)
 +  ))
 +
 +Первая строка Вам уже наверняка знакома,​ она выполняет остальные строки для альбомных трэков,​ и, естественно,​ пропускает их для одиночных.
 +
 +Строки начиная со второй являются вызовом одной команды - ''​$ifgreater()'',​ которая делает следующее:​ //Если номер трэка больше 9 (что означает что он состоит из 2-х цифр), то отображать номер трэка. Иначе отобразить 0, а затем номер трэка, без нуля в начале.//​
 +
 +Стоит отметить,​ что вы не можете не указывать часть //​иначе//​ в коммандах ''​$ifgreater()'',​ такое разрешается только для обычного ''​$if()''​. ​
 +
 +Функция ''​$num(number,​length)''​ работает следующим образом:​ она берет число //number// и присоединяет нули к его началу до тех пор пока, пока дляна строки не станет равной //length//. Если же длина строки (количество цифр) в //number// уже больше //length//, то никаких действий выолняться ​ не будет. Если же строка содержащая число //number// уже заполнена нулями спереди до длины большей чем //length//, то после выполнения функции лишние нули будут удалены. Данная возможность этой функции именно то, что нам надо в этом скрипте,​ потому что ее вызов с //length// равной 1 всегда удаляет любые нули в начале строки,​ а подстановка полей foobar2000 всегда дополняет нулями номер трэка до двух цифр. Вы могли заметить,​ что наш вызов ''​$ifgreater()''​ сам ставит ноль в для номера трэка, если он меньше 10.  Вы спросите,​ зачем мы подставляем ноль сами, ​ хотя мы обрезали его перед этим используя ''​$num(%tracknumber%,​1)''?​ Почему не не используем стандартную подстановку полей, которая автоматически добавляет ноль? Так вот, далее мы планируем отображать этот ведущий ноль другим цветом,​ а используя стандартную подстановку полей это невозможно. ​
 +
 +Собственно скрипт для столбца //​Tracknumber//​ готов. Тем не менее мы добавим одну маленькую изюминку,​ сделав отображение номеров трэков в [[wpru>​Hex|шестнадцатеричной системе]]. Конвертация числа осуществляется простым вызовом функции ''​$hex()''​. Получим наш финальный скрипт:​
 +
 +  $if($get_global(isAlbum),​
 +  $ifgreater(%tracknumber%,​15,​
 +  $hex(%tracknumber%,​1),​
 +  '​0'​$hex(%tracknumber%,​1)
 +  ))
 +
 +Синтаксис у ''​$hex()''​ точно такой же как и у ''​$num()''​. Все что нам нужно сделать,​ это поместить все выводимые номера трэков в функцию ''​$hex()''​ и немного изменить код для добавления нулей, потому что в шестнадцатеричной системе вторая цифра появляется у числа большего F, равному 15 в десятеричной системе. Соответственно нам нужно заменить нашу 9-ку во второй строке скрипта на 15. 
 +
 +Конечно же Вы можете отображать номера трэков так как Вам угодно,​ я же поклонник шестнадцатеричной системы,​ и буду использовать этот скрипт на всем протяжении этого ​ пособия.
  
 ~~DISCUSSION~~ ~~DISCUSSION~~
foobar2000/tagz/tutorial/create_columns.1148188433.txt.gz · Последние изменения: 2006/05/21 08:18 (внешнее изменение)