Як зробити щоб у Blogger слово «коментар» змінювалось відповідно кількості коментарів:
1 — коментар, 2-3-4 — коментаря, 5 та більше ( до першої сотні :) — коментарів
До чого захоплюючою справою виявилось таке, на перший погляд нудне, заняття, як допилювання стандартного шаблону Blogger.
У інтернеті опубліковано безліч різноманітних «хаків» перепубліковувати їх було б невдячною справою. Все, що можна зробити зі стандартним Blogger Templates читайте на сторінці «Мої закладки» у розділі «Блоґґер з напильником».Завдяки дієвій участі tivasykа та Sandy сира ідея набула завершеної форми, перевершивши початковий задум.
Народ з blogger team намагається зробити універсальні шаблони для всіх часів, мов, народів. Добрі наміри догодити всім призводять іноді до появи невластивих українській мові шаблонно-казенних конструкцій на зразок:
1 коментарі(в); 2 коментарі(в); 3 коментарі(в);Хоч це не принципово, для блога цінніший зміст, багато хто читатиме його тільки через рідер, але не хотілося б псувати перше враження, а невідповідність числівнику залишає відчуття якоїсь «общаги», загальної «блогоферми».
Познущавшись кілька вечорів над шаблоном я з'ясував:
<b:if cond='умова'>Якщо виконується ця умова <дія/> робити це <b:else/> інакше <дія/> це </b:if> кінець для цієї умовиіноді <b:else> пропускають, тобто, якщо умова виконується, робимо те, що між <b:if cond= " — "> та </b:if> , інакше йдемо далі.
Залишилось з'ясувати значення перемінних.
Було б не цікаво шукати документацію по API, проміняти живе дослідження методом наукового тику на нудне читання, це «не наш метод» :) . Коли нічого не виходитиме тоді…
Інструкція до мобільного телефону Одеського виробництва: Ви такі открилі ету кніжку? Значіт теперь телефону реально конец, вот адреса людей которим будет інтересно купить ваш хлам.
data:post.numComments — кількість коментарів до допису
data:commentLabel — слово «коментар»
data:top.commentLabelPlural — слово: «коментарі»
Відкриваєм «панель інструментів» — «макет» — «редагуватиHTML»,
зберігаємо про всяк випадок шаблон,
ставимо галочку навпроти «Розширити шаблони елементів керування».
Розшукуємо де у нас виводиться кількість коментарів:
<div class='comments' id='comments'> <a name='comments'/> <b:if cond='data:post.allowComments'> <h4> <b:if cond='data:post.numComments == 1'> 1 <data:commentLabel/>: <b:else/> <data:post.numComments/> <data:commentLabelPlural/>: </b:if> </h4>Не фонтан :(
Приступаємо до тотальної примусової українізації.
Замінюємо вище наведений код цим:
<div class='comments' id='comments'> <a name='comments'/> <b:if cond='data:post.allowComments'> <h4> <b:if cond='data:post.numComments == 0'> А Ви що скажете? : <b:else/> <b:if cond='data:post.numComments == 1'> 1 коментар : <b:else/> <b:if cond='data:post.numComments < 5'> <data:post.numComments/> коментаря : <b:else/> <b:if cond='data:post.numComments > 4'> <data:post.numComments/> коментарів : <b:else/> <b:if cond='data:post.numComments > 20'> коментарів : <data:post.numComments/> </b:if></b:if></b:if></b:if></b:if> </h4>
Зберігаємо шаблон.
Якщо все зроблено як треба, одразу під дописом, на внутрішніх сторінках кількість коментарів відображатиметься так як у мене тут.
Ні, не все. Коментуючи, тівасик запропонував алгоритм:
достатньо вирахувати залишок від ділення data:post.numComments на 10 (в javascript: x%10) і тоді аналізувати в такому порядку (верхні варіанти виключають нижні):А Sandy написав новий код
x%10 = 5..9 --- коментарів
x%10 == 2..4 --- коментаря
x%10 == 1 --- 1 коментар
x%10 == 0 --- немає коментарів
<b:if cond='data:post.allowComments'> <a class='comment-link' expr:href='data:post.addCommentUrl' expr:onclick='data:post.addCommentOnclick'/> <b:if cond='data:post.numComments == 0'> Нема <data:commentLabelPlural/> <b:else/> <b:if cond='data:post.numComments > 20'> <data:post.numComments/> <script> switch(<data:post.numComments/> % 10){ case 1: document.write("коментар:"); break; case 2: case 3: case 4: document.write("коментаря:"); break; default: document.write("коментарів:"); } </script><noscript><data:commentLabelPlural/></noscript> <b:else/> <b:if cond='data:post.numComments == 1'> <data:post.numComments/> коментар: <b:else/> <b:if cond='data:post.numComments < 5'> <data:post.numComments/> коментаря: <b:else/> <b:if cond='data:post.numComments > 4'> <data:post.numComments/> коментарів: <b:else/> <data:post.numComments/> <data:commentLabelPlural/> </b:if></b:if></b:if></b:if></b:if>Який я трохи змінив, встановлюючи на цей блог.
Остання редакція від Sandy для понад сто коментарів:
<b:if cond='data:post.numComments == 0'>
Нема <data:commentLabelPlural/>
<b:else/>
<b:if cond='data:post.numComments > 20'>
<data:post.numComments/> <script>
if(<data:post.numComments/> / 10 % 10 == 1) document.write("коментарів"); else
switch(<data:post.numComments/> % 10){
case 1: document.write("коментар"); break;
case 2:
case 3:
case 4: document.write("коментаря"); break;
default: document.write("коментарів");
}
</script><noscript><data:commentLabelPlural/></noscript>
<b:else/>
<b:if cond='data:post.numComments == 1'>
<data:post.numComments/> коментар
<b:else/>
<b:if cond='data:post.numComments < 5'>
<data:post.numComments/> коментаря
<b:else/>
<data:post.numComments/> <data:commentLabelPlural/>
</b:if></b:if></b:if></b:if>
тепер можна насолоджуватися.
До речі, Sandy зробив ще одну дуже корисну річ універсальний транслітератор рекомендую, транслітерація, правильна розстановка переносів, автоматична вставка типографських знаків замість звичайних лапок "" = «», дефіса -- = — і багато іншого.
16 коментарів:
Дуже дякую. Шкода, що не можна останню цифру тестувати, але до 21 коментарів мені ще далеко... ;)
В принципі можна було змінювати напис джаваскриптом, але мені не подобається коли на сторінці забагато скриптів. Варіант переходу від "20 коментарів:" до "коментарів: 21" і далі, непоганий компроміс.
до 21 коментарів мені ще далеко... ;)
Хто знає, хто знає... :)
Вставлю Javascript для більше 20 коментарів. ;)
Багато скриптів це не додасть...
вирішення проблеми >20 коментарів просте в теорії: достатньо вирахувати залишок від ділення data:post.numComments на 10 (в javascript: x%10) і тоді аналізувати в такому порядку (верхні варіанти виключають нижні):
x%10 = 5..9 --- коментарів
x%10 == 2..4 --- коментаря
x%10 == 1 --- 1 коментар
x%10 == 0 --- немає коментарів
але! засада: блогерські ‹b: if cond=''› не обробляють всередині 'cond' операнд %... плюс та мінус -- будь-ласка, працює, а ділення чи залишок -- ні...
якщо хто додумається, як обійти це обмеження -- тому буде слава і повага.
Дякую за алгоритм.
Хочеться слави і поваги ;) , та поки що красивого способу реалізувати безпосередньо у шаблоні не знайшов.
Обійти можна тільки якщо завантаживши зовнішній скрипт отримати кількість коментарів, виконати x%10 та дописати слово, для no scrypt залишити старий варіант.
Зацікавило, приділю трохи уваги вивченню JS. Зараз у мене дуже поверхові знання.
Усе просто:
<b:if cond='data:post.allowComments'>
<a class='comment-link' expr:href='data:post.addCommentUrl' expr:onclick='data:post.addCommentOnclick'>
<b:if cond='data:post.numComments == 0'>
Нема <data:commentLabelPlural/>
<b:else/>
<b:if cond='data:post.numComments > 20'>
<data:post.numComments/> <script>
switch(<data:post.numComments/> % 10){
case 1: document.write("коментар"); break;
case 2:
case 3:
case 4: document.write("коментаря"); break;
default: document.write("коментарів");
}
</script><noscript><data:commentLabelPlural/></noscript>
<b:else/>
<b:if cond='data:post.numComments == 1'>
<data:post.numComments/> коментар
<b:else/>
<b:if cond='data:post.numComments < 5'>
<data:post.numComments/> коментаря
<b:else/>
<data:post.numComments/> <data:commentLabelPlural/>
</b:if></b:if></b:if></b:if>
Дякую Sandy !
Моє шанування. Одразу побачив свої помилки.
Доречі про & amp; lt; для < я також не подумав, користуватимусь.
2sandy & ivanko
респекти. трошки пізніше буду гратися з шаблоном, спробую прикрутити цей бантик!
Я ще про 111 і більше коментарів забув... Це не правила, а жах якийсь... ;)
Останній варіант.
Я ще про 111 і більше коментарів забув..
Не все одразу, спочатку подолаємо першу сотню ;)
Універсальний Транслітератор вразив, він ще й коди здатен модифікувати для вставки на блог?!
Моє безмірне шанування!
Я вже раз спробував набирати дописа прямо у транслітераторі, непогано. Не вистачає кнопочок зі стандартним набором тегів ( <b></b>,<i></i>,<a href=”” title=""></a> ), але я й так звикаю набирати їх разом із текстом ;)
А я їх набираю за допомогою стандартних кнопок у Blogger після того, як вставляю туди текст. Ну, я подумаю...
Там насправді багато чого треба додати, але часу ніколи не вистачає...
А я їх набираю за допомогою стандартних кнопок у Blogger
Там є нюанс, якщо перейти з режиму HTML у режим візуального редактору блогер понатикує </br> де треба і де не треба, ніякі розстановки галочок у налаштуваннях не допомагають. я ж використовую <p></p>.
часу ніколи не вистачає...
Це я дуже добре розумію, тому і хочеться мати зручний та інтуітивно зрозумілий інструмент. Здається найближче до цього підійшов scribefire, але переноси... У вільний час ще помучаю мавпочку
Може отаке підійде?
Дякую Sandy, зараз випробую, на перший погляд є все що необхідно, навіть трохи більше :)
Повідміняти слово "коментар" для кількості коментарів - цікава думка, теж з цим зіткнувся міняючи шаблон і перівяючи написання коментарів. Але не став звертати уваги. Думаю піучитись трохи html, що поравити кольори і таке інше верхнього бар-меню. Якщо охота не пропаде, бо й так здається нормально.
Якщо охота не пропаде, бо й так здається нормально
Головне щоб не пропадало бажання вести блог, зрештою оформення вторинне, важливіший зміст.
Я заходив на ваш блог, вибрана вами тема найкраще пасує до змісту, легко читається, легко сприймати інформацію, зауважу лише, що особисто у мене бажання торкатися політичних тем зникло повністю.
Дописати коментар
Можна використовувати теги:
<i>курсив</i> <b>жирний</b>
<a href="http:// «адреса посилання» "> «текст» </a>