За последние 24 часа нас посетили 16580 программистов и 1578 роботов. Сейчас ищут 880 программистов ...

Мультиязычный сайт ?

Тема в разделе "PHP и базы данных", создана пользователем SaNeKnet, 12 янв 2017.

  1. SaNeKnet

    SaNeKnet Новичок

    С нами с:
    13 дек 2016
    Сообщения:
    7
    Симпатии:
    0
    Адрес:
    Харьков
    Интересует вопрос по поводу обустройства БД для мультязычного сайта.
    Хотел сделать так
    ______________
    Таблица 1
    Название табл. lang
    поле id (int),(key)
    поле url (255 символов),(уникальный)
    поле uk (bolean)
    поле ru (bolean)
    ______________
    Таблица 2
    Название табл. uk
    поле id (int),(key)
    поле lang.url (255 символов),(уникальный), связь с полем url из табл. lang
    поле tiitle (text)
    поле script (text)
    поле content (text)
    и т.д.
    ______________
    Таблица 3
    Название табл. ru
    поле id (int),(key)
    поле lang.url (255 символов),(уникальный), связь с полем url из табл. lang
    поле tiitle (text)
    поле script (text)
    поле content (text)
    и т.д.
    _______________

    Пытался делать такой запрос (и кучу антологичных), ничего не вышло.
    Код (Text):
    1. $query = "SELECT *
    2.             FROM  lang, uk
    3.            WHERE `url` = '/contact'";
    Выдавало нужную строку из табл. lang и последнюю строку из табл. uk.

    MsQL Server version: 5.6.27-75.0-log
    phpmyadmin Информация о версии: 4.0.10.12
     
    #1 SaNeKnet, 12 янв 2017
    Последнее редактирование: 12 янв 2017
  2. SaNeKnet

    SaNeKnet Новичок

    С нами с:
    13 дек 2016
    Сообщения:
    7
    Симпатии:
    0
    Адрес:
    Харьков
    p.s. может есть другие варианты организация таблиц в БД под это дело ??
     
  3. Abyss

    Abyss Старожил

    С нами с:
    12 дек 2015
    Сообщения:
    1.298
    Симпатии:
    218
    Адрес:
    Default city
    Берёшь и делаешь словарь, дядя. Просто для текста. Через константы или массив или класс, похеру. И всё.
     
  4. SaNeKnet

    SaNeKnet Новичок

    С нами с:
    13 дек 2016
    Сообщения:
    7
    Симпатии:
    0
    Адрес:
    Харьков
    И толку мне от этого словаря. Будет файл размером в косарь строк. А если хранить в БД, то и редактировать легче.
     
  5. Abyss

    Abyss Старожил

    С нами с:
    12 дек 2015
    Сообщения:
    1.298
    Симпатии:
    218
    Адрес:
    Default city
    PHP:
    1. $text["uk"]["greetings"] = "Hellow dear";
    2. $text["ru"]["greetings"] = "Привет";
    3. $text["ua"]["greetings"] = "Денег нет";
    --- Добавлено ---
    У тебя сайтик с большим кол-вом текста на разных языках ?
     
  6. SaNeKnet

    SaNeKnet Новичок

    С нами с:
    13 дек 2016
    Сообщения:
    7
    Симпатии:
    0
    Адрес:
    Харьков
    У меня есть 2 файла шаблона (ru, uk). И я в них из БД вставляю (title, description, style (если на данной страницы нужен особый стиль, который не вписан в общем файле), script (аналогично style), content (содержимое страницы вместе грубо говоря всё между <body>))

    Да, и админку сделал для редактирования всех выше перечисленных ячеек из БД с визуальным редактором html (что бы человек с минимальными знаниями мог без проблем подправить текст).

    была БД по другому устроенна (Работает) но мне нравится структура.
     
  7. Abyss

    Abyss Старожил

    С нами с:
    12 дек 2015
    Сообщения:
    1.298
    Симпатии:
    218
    Адрес:
    Default city
    Тогда я ошибся, но по твоей проблеме я бы посоветовал нормализировать это дело до
    до состояния
    Код (Text):
    1. tbl_langs
    2.   id
    3.   name
    4. tbl_urls
    5.   id
    6.   path
    7. tbl_text
    8.   id
    9.   lang_id
    10.   url_id
    11.   text
    12.   params...
    --- Добавлено ---
    Связи там, ON DELETE CASCADE
     
    SaNeKnet нравится это.
  8. SaNeKnet

    SaNeKnet Новичок

    С нами с:
    13 дек 2016
    Сообщения:
    7
    Симпатии:
    0
    Адрес:
    Харьков
    А что хранить в path из tbl_urls ??
     
    #8 SaNeKnet, 12 янв 2017
    Последнее редактирование: 12 янв 2017
  9. Abyss

    Abyss Старожил

    С нами с:
    12 дек 2015
    Сообщения:
    1.298
    Симпатии:
    218
    Адрес:
    Default city
    Url очевидно, но ты не за названиями столбцов смотри, а суть улови
     
  10. SaNeKnet

    SaNeKnet Новичок

    С нами с:
    13 дек 2016
    Сообщения:
    7
    Симпатии:
    0
    Адрес:
    Харьков
    Вроде суть уловил. Получается тут нельзя построить один запрос (Получить данные по нужной странице, нужного языка + узнать есть ли эта страница на других языках)
     
  11. Abyss

    Abyss Старожил

    С нами с:
    12 дек 2015
    Сообщения:
    1.298
    Симпатии:
    218
    Адрес:
    Default city
    INNER JOIN ON DA WAY
     
  12. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    можно что угодно. Не нужно. Один запрос выбирает страницу. Эти данные будут жить в какой-то переменной. А другой запрос выбирает возможные языки, на которых эта страница доступна. Они будут жить в другой переменной. Не нужно пытаться все запросы впихнуть в один. Это можно, но по факту БД сделает всё равно несколько разных. Просто вернёт их в виде куска дерьма, с которым будет неудобно работать.
    --- Добавлено ---
    Это я про реляционную бд. А вот в хранилищах типа монго вполне можно получить сразу объект, в котором будет в одном из полей и целый массив языков. Но тут не факт, что удастся сделать это консистентно. Как я понимаю, такое решается тупо за счёт записывания в объект каждого перевода списка языков других переводов этой страницы. И потом надо вручную следить, чтобы ничего не распоолзлось.
     
    SaNeKnet нравится это.