initfest Wordpress theme
Go to file
Vencislav Atanasov 9e31f24f69 Add header customisation for 2023 2023-09-02 23:09:36 +03:00
css Improve displaying of sponsors logos. 2022-09-29 15:31:38 +03:00
html Adding avatars 2014-10-13 09:31:35 +03:00
img Add 2023 images 2023-09-02 22:55:03 +03:00
schedule schedule: fix XSS, reported by Hetti 2022-10-16 15:23:01 +03:00
.gitignore ignore vim swp files and a config file 2014-10-14 17:23:30 +03:00
LICENSE Initial commit 2014-09-25 12:26:21 +03:00
README.md Add some docs on updating the design. 2020-09-30 21:10:41 +03:00
cli-header.php add clarion interfacing scripts 2014-10-14 18:58:07 +03:00
entry-content.php Convert all space tabs into real tabs. Due to WP convention. 2014-10-04 17:31:15 +03:00
entry-footer.php Convert all space tabs into real tabs. Due to WP convention. 2014-10-04 17:31:15 +03:00
entry-meta.php 2021: rm author/publication date from post 2021-07-21 18:29:58 +03:00
entry-summary.php Convert all space tabs into real tabs. Due to WP convention. 2014-10-04 17:31:15 +03:00
entry.php Convert all space tabs into real tabs. Due to WP convention. 2014-10-04 17:31:15 +03:00
favicon.ico adds favicon 2015-10-16 14:23:32 +03:00
footer.php Misc. 2020 tweaks 2020-09-05 11:38:33 +03:00
front-page.php front-page: remove old unused code 2021-07-21 19:16:57 +03:00
functions.php 2022: new fb preview 2022-09-29 15:31:37 +03:00
header.php Add header customisation for 2023 2023-09-02 23:09:36 +03:00
index.php 2021: rm comments-are-disabled 2021-07-21 18:29:00 +03:00
license.txt initial stuff 2014-09-30 12:13:06 +03:00
page-schedule.php 2021 hacks 2022-09-29 15:31:37 +03:00
page-speakers.php parse the year properly, restore a simplified schedule-config 2016-10-24 16:22:25 +03:00
page-sponsors.php load all sponsors 2014-10-14 19:26:14 +03:00
page-streaming.php streaming: remove chat for 2022 2022-10-16 15:23:15 +03:00
page.php add code-of-conduct for the submenu 2015-09-20 15:44:01 +03:00
readme.txt initial stuff 2014-09-30 12:13:06 +03:00
schedule-config.php schedule: add support for full schedule 2018-10-16 13:07:52 +03:00
screenshot.jpg initial stuff 2014-09-30 12:13:06 +03:00
sidebar.php Fix translation strings 2015-09-30 21:11:27 +03:00
style.css Revert "testing.." 2015-09-15 01:24:40 +03:00

README.md

Документация на сайта на openfest

Основни моменти

Сайтът представлява wordpress с тема, писана специално за целта (initfest), която може да се намери в github (https://github.com/initLab/initfest), polylang plugin-а за многоезичност и jetpack за друга функционалност.

Част от данните в сайта се взимат автоматично от външна система (clarion, достъпна на https://cfp.openfest.org, source има на https://github.com/ignisf/clarion/), която се грижи да събира програмата и да комуникира с лекторите.

Кратко overview на модела на wordpress

(който си е играл по-сериозно, може да прескочи това некадърно обяснение)

Почти всичко в wordpress е post. Всеки post има следните измерения (т.е. може да има за всяко от тях точно една стойност):

  • тип - post, page, custom page и т.н.
  • език
  • статус - published, draft, trash...
  • category - категория, в които попада

Всеки post има следните задължителни неща (не са всички, само релевантните за нас):

  • title - някакво заглавие
  • slug - идентификатор, който се ползва в url-тата (не е title)
  • author - автор
  • content - текст

И всеки post също така може да има

  • custom fields, които да ползваме в логиката с някаква цел (вж. url за sponsors).
  • thumbnail/featured image - картинка, която се показва с post-а
  • tag-ове (в момента не ги ползваме, но може да ни потрябват)

Многоезичност

Използваме polylang plugin-а, който превежда всичко, което му падне.

Интерфейсът му е лесен за ползване, в общи линии за всеки тип post/page и т.н. има език, и вътре в редакцията може да се избере да се иде на версията за другия език (вж. по-долу процедурата за нов спонсор). Има превеждане на отделни string-ове, които са били регистрирани от plugins->polylang->strings. Стринговете в момента са регистрирани във functions.php най-отдолу.

polylang създава един проблем при автоматичните скриптове, че трябва да се прави wp_query по отделно за двата езика, защото по default дава текущия или default-ния. Ако автоматично се създава post, трябва задължително да се създаде по един за двата езика и после да се свържат.

Също така, ако например дадена категория името и го няма преведено на другия език, не дава на този език да се слагат неща в тази категория, и не дава никаква грешка.

Хубаво е да се внимава с избирането на имена на slug-овете на post-овете, понеже два post-а не могат да имат същия slug, за това в момента в сайта има schedule и schedule-3 (едното е български, другото английски).

По принцип без polylang темата няма да работи, или поне не по очаквания начин. Има една-две wrapper функции, но те са само за няколко редки места, където не е load-нат plugin-а още.

Менюта

В темата има 6 менюта, всяко от които в два варианта, за двата езика.

  • Главно меню - показва се винаги, най-отгоре на сайта
  • submenu/about - показва се само на about и свързаните страници, като team, volunteers и т.н., логиката за показването му може да се види в page.php.
  • Дънно openfest - като главното меню
  • Дънно програма - свързаните с програмата неща
  • Дънно други - хотели, пиене и т.н.
  • Дънно follow - социални мрежи

Единственото по-специално е, че link-овете в главното меню за социалните мрежи и т.н. трябва да са без име и да са в специфични css класове, за да се показват както е нужно.

Главна страница

Страницата се различава от останалите по различния си template и начин на работа. Идеята и е, че показва нещо като sidebar-а, но не същото (кодът е набит директно вътре) и след това в две колони на два реда последните post-ове от категория "news". Беше с три колони, но отиваше твърде надолу, а текстът на главната страница го има в about и не е това, което ще гледат хората като идват на сайта.

Custom post-ове и полета в тях

Спонсори

Спонсорите са отделен тип post в системата. Имат език, excerpt, featured image (лого на спонсора) и две custom полета: url и partner.

  • url е link към сайта на спонсора
  • partner означава, че спонсорът реално е партньор и трябва да се покаже в друга част на sidebar-а.

Страницата за спонсорите трябва да е от template "Sponsors" (виж page-sponsors.php) за да работи.

Спонсорите и партньорите са в същия тип post поради това, че са твърде близки по значение и визуализация.

Процедура за добавяне на спонсор

  • От менюто се избира sponsors->add sponsor
  • Задава му се име и (ако има) текст на български
  • в custom fields му се добавя url със стойност http://..дето трябва
  • ако е партньор, в custom fields му се добавя partner със стойност 1
  • отива се на featured image
  • upload-ва се (горе има upload tab)
  • избира се картинката
  • дава се update
  • отива се в английската версия ( щрака се на + знака до флагчето, първата кутия в дясно)
  • слага се заглавието на английски (за повечето е същото) и текста на английски дава се update

Лектори

Лекторите са съвсем прост тип post, който има отделен template за визуализация (виж page-speakers.php). Страницата за всички лектори трябва да е от този template, за да работи.

Като наша добавка имаме 3 custom field-а, които се визуализират, ако са добавени в едно малко меню с икони:

  • github - github профил (само името)
  • twitter - twitter профил (само името на account-а)
  • public_email - публичния email адрес

todo: да се добави и url към някакъв homepage, като се появи в clarion-а.

Транспорти

За всеки тип транспорт до мястото на събитието има отделна страница, като всички се сглобяват в една и се показват в sidebar-а или където е нужно.

Комуникация с clarion

Clarion ни предоставя JSON интерфейс с всичките неща, от които се генерира програмата.

Данните се дърпат чрез smartCurl (който и кешира данните) и от тях се генерират програмата на сайта и списъкът с лекторите.

Скриптовете, които генерират програмата правят #href link-ове към страницата с лекторите, за да работят линковете. href-овете са наименувани като името на лектора.

schedule-config.php

За да се избере какво да се визуализира, се ползва schedule-config.php, който от своя страна се зарежда от page-schedule.php и page-speakers.php.

Има два елемента, които се вадят от името на сайта/страницата - дали става въпрос за лекции или workshop-и, и за коя година става въпрос. На база на тях getSchedConfig() в schedule/config.php избира кое е id-то на конференцията и кой тип са лекциите и workshop-ите.

Генериране на външния вид на таблицата

Черна магия, Slackware трябва да го опише.

functions.php

Вътре са добавени няколко работни функции, които трябва в някакъв момент да се прегледат:

  • openfest_home_page() - връща дали е главната страница, поради един проблем, създаден от polylang, заради който is_front_page() не работеше.
  • of_get_lang(), е_() - wrapper-и около polylang, ако липсва plugin-а.
  • pn_get_attachment_id_from_url - отмъкната функция, която намира id на attachment от url, трябва при зареждането на снимките на лекторите.

Създаване на сайт за ново издание на събитието

Клонира се последният сайт с помощта на NS Cloner plugin-а от главния админ панел на сайта. За slug на сайта е редно да се използва годината на предстоящото събитие, тъй като това ще бъде "ключ" за графичните елементи (виж по-долу).

Статусът на всички публикации се слага на "Чернова", за да не се виждат в сайта, но да могат при нужда да се използват за шаблони.

В Languages -> Strings translations трябва да се обнови информация като име и описание на събитието, дати и местоположение на залата.

За да излезе новият сайт на началната страница, maniax трябва да направи някаква магия в базата, тъй като redirect плъгинът е счупен.

Обновяване на визията

Всяка година се променя визията на сайта. Ако няма намеса в layout-а, е достатъчно да бъдат добавени следните картинки (със съответната година в името):

  • banner-back-2020.jpg - фон за шапката на сайта
  • banner-bg-2020.png - надпис на български в/у горния с името на събитието, дати и място
  • banner-en-2020.png - като горния надпис, но на английски
  • logo-2020.png - лого на събитието
  • navbg-2020.png - фон за менюто в най-горната част на сайта. Обикновено е градиент от бяло към основния цвят.