initfest/README.md

133 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Документация на сайта на 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, трябва при зареждането на снимките на лекторите.