Перейти к содержимому








Фотография
Нужна помощь

Помогите немного с теорией по задачке или куда копать?



  • Авторизуйтесь для ответа в теме
В теме одно сообщение

#1 ray1978

ray1978
  • Premium
  • Сообщений: 553
  • Регистрация: 02.12.2013
  • Заработано: 71 руб.
Репутация: 242

Награды: 23

  
  
  
  
  
  
  
  

Отправлено 19 Сентябрь 2018 - 04:29

Приветствую.

Собственно, задачку свою я решаю, но мне нужна помощь, как бы красивее,

нагляднее или с заделом на масштабирование оформить решение.
В приводимой ниже задачке, язык программирования сильно роли не играет.
Я, для примера, буду использовать php

Условие задачи:

В базе данных (БД) имеются текстовые поля, которые будут выводиться на сайте.
(по-хорошему - пусть это будет текст статьи).
Вот так это хранится в БД


<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin tristique, dui nec vestibulum rutrum,
ipsum arcu laoreet lorem, non tempus felis sem ut dolor. Donec lacus orci, aliquet id tempus in,
pretium non odio. Donec id risus molestie, scelerisque nibh sed, aliquet lectus. Mauris dictum laoreet scelerisque.</p>

{html_box1}
<p>In tincidunt augue sed urna dapibus, et vehicula libero malesuada. Maecenas gravida turpis
hendrerit sodales suscipit. Maecenas hendrerit, velit nec ullamcorper porta, nibh lectus iaculis lorem,
eu bibendum odio augue varius sapien. Sed eleifend, ante efficitur venenatis commodo, lacus libero efficitur odio,
eget consectetur sem odio nec sapien.</p>

{html_box2}

<p>Fusce condimentum nibh at quam sodales, nec luctus quam feugiat. Duis varius bibendum sagittis.
Nam eget mi hendrerit, mattis lorem ut, gravida nisl. Praesent vehicula elit eget accumsan tincidunt.
Pellentesque quis egestas ipsum. Sed vitae bibendum ipsum.</p>

{html_box1}
{gallery1}



Как видите, по тексту разбросаны метки {html_box1}(2 раза), {html_box2}, {gallery1}

В эти метки будут подставляться свои "готовые к показу кусочки данных в виде html"


!!! Предвосхищая сразу вопрос о том, зачем метки - вставляй сразу "готовые кусочки данных в html"
отвечу.
Эти "готовые кусочки данных в html" надобно проставлять во многих статьях, описаниях и т.д.
При этом, "кусочки данных" - они изменяются время от времени.
Такое изменение должно сразу отразиться везде, где надо.
А, возможно, потребуется сразу отключить определенные "готовые кусочки данных в html".
Просматривать каждую запись в БД и править - не комильфо.
И, кстати, временно отключить вывод, не значит плностью его убрать из этого места навсегда.


Итак, продолжаем.
Вопрос по самой реализации


Я понимаю, что перед тем, как показать на экране, мне необходимо
"просмотреть" текстовы фрагмент на нахождение подобных меток
и, в случае обнаружения, заменить их "готовыми кусочками данных в html для каждой метки"


Теперь сами вопросы:
1. Лучше подобные вещи делать через "регулярные выражения" или "строковыми командами php"?

 

2. Не могу определиться откуда вызывать методФункцию(ЗаменаМеток) для решения подобной задачи
   - если у меня метки только в статьях. Тогда сделать метод в самом классе Post (класс Post - это пример названия класса)
   или если метки будут в статьях, описаниях категорий и в других местах сайта
   - запихать в один модуль всех своих функций? (типа my_function.php)

     или выделить отдельный файлФункций с необходимыми методами (my_function_parse.php)
  

     или же
   - сделать отдельный класс со статическим методом. Например (Parse::do(arguments))
   (возможно метод do() будет один, или потребуется еще несколько)

    Программирование идет на ООП
    статьи - это класс Post
    модели статей - это класс Post_m
    и т.д.
    

    
В общем, как рассуждать в подобных вещах?



P.S.
Усложнение задачи.

Я наперед не знаю, есть ли метки в текстовом фрагменте и какие они.
Получается, прежде, чем я буду использовать методЗаменыМеток,
я всегда должен буду подготовить ВСЕ данные по замене по ВСЕМ возможным меткам?

 

Например, в ассоциативный массив загнать данные

[{html_box1}] => '<div class="html_box">Здесь html_box1</div>'
[{html_box1}] => '<div class="html_box">Здесь html_box2</div>'
[{gallery11}] => '<div class="gallery">Здесь галлерея</div>'
и т.д.

Теперь Второй вопрос:

"Кто как думает, размышляет над решением подобной задачи"
Где видятся подводные камни?
Какое может быть оптимальное решение?
 

 

Заранее благодарю всех, кто принял участие в решении задачи.
Как всегда, потихоньку поставлю плюсики.
 


Сообщение отредактировал ray1978: 19 Сентябрь 2018 - 04:49

  • 0

#2 doca

doca
  • Platinum
  • Сообщений: 346
  • Регистрация: 16.08.2016
  • Заработано: 40 руб.
Репутация: 66

Награды: 21

  
  
  
  
  
  
  
  

Отправлено 19 Сентябрь 2018 - 07:30

1) Я бы произвел на "лету" http://php.net/manua...on.ob-start.php . Соответственно я так делал задачу вопросных слов. К примеру у тебя сайт сантехники,  и  описании(ты его грубо заранее не знаешь) есть слова. который пользователь может не знать. делаешь обработку в таком формате и вся задача решается.

2) Аналогично. у меня есть массив данных, и я им пробегаюсь по выводимому тексту и делаю замену.


1) Лучше подобные вещи делать через "регулярные выражения" или "строковыми командами php"? 

как душе угодно. если сделаешь через регулярки то флаг в руки. а так имхо тут легче будет написать через php, чем играться и подбирать регулярку

2) Класс или функция - я бы в методе вывода данных из бд допилил функцию(класс - тут вопрос только как тебе больше нравится) и через нее выполнил обработку.


Я наперед не знаю, есть ли метки в текстовом фрагменте и какие они.
Получается, прежде, чем я буду использовать методЗаменыМеток,
я всегда должен буду подготовить ВСЕ данные по замене по ВСЕМ возможным меткам? - да, по другому по сути никак.


"Кто как думает, размышляет над решением подобной задачи"
Где видятся подводные камни?
Какое может быть оптимальное решение?

 

- количество замен- это большое колво запросов в бд и пямять на массив данных замен. главное чтобы серв мог это выдержать.

после использования- удалить переменные.

- кешировать запросы и установить кэш лояльный на 1-2 дня и не выполнять запросы в бд по новому.


  • 1



Похожие темы Collapse

Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 анонимных

×

Зарегистрируйся моментально!