не забываем, что бутстрап это все-таки фреймворк. Его можно скомпилить так, как вам того нужно. В том числе например только сетку. В итого получится около 17 килобайт в несжатом состоянии: сетка + медиа + normalize. Что, согласитесь, довольно удобно для создания быстрой адаптивной базы.
для кул хацкеров устраиваем каконить ханипот. Типа mysite.com/admin
Админка естесно фейковая. Далее пилим каконить роботс.тхт отдачей через скрипт. Люди туда крайне редко смотрят, поэтому фильтруя поисковых роботов можно выявить людей. Если тот пойдет потом тыкаться по всяким админкам (в роботсе естессно закрываем ее через disallow). То такого говнюка можно считать потенциально опасным =)
Макс: избыточных дублей как раз не будет. Нужна статья на китайском? Пишем на китайском отдельную статью. Проблема слага надуманная. Т.к. Название статьи не меняется почти никогда, т.е. за очень редким исключением. Я бы вручную сделал смену слага. Т.е. это все таки очень важная сео составляющая.
Если выбрать ключом ид статьи+ид языка, то становится вообще просто. Чисто по иду статьи можно подтягивать картинки, еще какие-то данные(в единственном экземпляре). + можно делать уникальный языковой слаг. А в шаблоне выводить урлы языков + каноникал на дефолте. К томуже будет гораздо проще организовать поиск по языковым статьям (настроить сфинкс какойнить). С многоколоночной системой или со связями для языков будут 100% факапы при написании кода. Тем более очень трудно будет расширить или поменять язык в многоколоночной таблице.
Хотя, как вариант: использовать мускул 5.7 и заюзать жсон поля для текстовых данных. Правдо не в курсе как оно там работает т.к. не тестил и не пробовал, но в теории хранить жсон объект с нужными тебе языками вполне себе идея. Правда не понятно как реализовывать поиск по таким таблицам.
я бы делал три отдельных статьи, для каждого языка свои. Просто выборку этих статей для показа делал исходя из выбранного языка посетителя(уникальный составной ключ например ид языка+слаг, или праймори кей = ид статьи+ид языка). Мудрить с настройкам\колонками и прочим это сущий гемор. Расширить потом до еще 1 языка будет вообще лютый ад.
XenK: и? Для начала нужно сделать обычную авторизацию. Мануалов по этой процедуре полно. А затем рядышком ставить авторизацию через социалку. Там никакой магии не происходит. Во время первого входа юзера через социалку, создается новый обычный аккаунт. Просто вместо пароля используется токен социалки.
abbrakadabbra: Конечно, с ее помощью можно отфильтровать все входящие данные не прибегая к простыне самописного кода. Если несколько значений приходит, можно использовать filter_var_array, предварительно описав правила для каждого.
у нее проблемы с русским языком бывают. Например фильтр почты. Если почта на русском домене типа "почта@мойсайт.рф" не пропустит. Хотя фактически почта валидна.