Использование preg_replace в laravel - PullRequest
0 голосов
/ 16 ноября 2018

У меня есть данные базы данных, такие как text [mydata] some text [otherdata] some more text, и я хочу заменить эти [mydata], [otherdata] динамической информацией, такой как, например, заголовок категории.

Таким образом, результат моих данных будет выглядеть так:

text Category Title some text Category Desc some more text

вместо

text [mydata] some text [otherdata] some more text

Я думаю, что это может произойти preg_replace, но не совсем уверен.

код

View::composer('*', function ($view) {
  $notes = Notes::all();
  foreach($notes as $note){
     $descrip= $note->description;
  }

  $view->with('descrip', $descrip);
});

Подробнее

Таким образом, в основном $note->description содержание - это данные:

text [mydata] some text [otherdata] some more text

Я хочу заменить эти элементы данными из таблицы categories.

Есть идеи?

Обновление

хорошо, я копал и получил код ниже (используя str_replace), однако у него есть некоторые проблемы,

View::composer('*', function ($view) {
            //getting categories and pull out the values i want to use as `[....]`
            $catC = Category::all();
            foreach($catC as $catD){
                $meta_title = $catD->title;
                $meta_desc = $catD->meta_description;
                $meta_tags = $catD->meta_tags;
            }
            //replace those categories values with element in database `[......]`
            $seotemplates = SeoTemplate::all();
            foreach($seotemplates as $seotemplate){
                $myCustom = str_replace_array('[cattitle]', [$meta_title, $meta_desc, $meta_tags], $seotemplate->categories_desc_template);
            }

            $view->with('myCustom', $myCustom);
        });

Вопросы

  1. Я могу получить только [cattitle], но как насчет [catmeta] & [cattags]?
  2. $meta_title всегда будет возвращать первое значение из таблицы категорий (например, если я посещаю HP страницу категории, она возвращает ACER как [cattitle] или любые другие страницы категории, которые я посещаю. Это всегда ACER

Обновление 2

Я решил проблему 1 моего первого обновления, но проблема 2 осталась, вот обновленный код

View::composer('*', function ($view) {
            //categories
            $catC = Category::all();
            $catD = [];
            foreach($catC as $catD){
                $catD = [
                    $cattitle = $catD->title,
                    $catmeta = $catD->meta_tags,
                    $catdesc = $catD->meta_description
                ];
            }
            $a1 = array("[cattitle]","[catmeta]","[catdesc]");

            $seotemplates = SeoTemplate::all();
            foreach($seotemplates as $seotemplate){
               $myCustom = str_replace($a1, $catD, $seotemplate->categories_desc_template);
             }

            $view->with('myCustom', $myCustom);
});

Текущий выпуск:

  1. $meta_title всегда будет возвращать первое значение из таблицы категорий (например, если я посещаю HP страницу категории, возвращается ACER как [cattitle] или любые другие страницы категорий, которые я посещаю. Это всегда ACER

1 Ответ

0 голосов
/ 16 ноября 2018

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

Сначала, как упомянуто @hktang, в своем комментарии вы дублируете свои переменные, а затем назначаетеэто значение снова и снова, а не добавление к нему.Попробуйте это:

$catE = [];
foreach($catC as $catD){
    $catE[] = [
        $cattitle = $catD->title,
        $catmeta = $catD->meta_tags,
        $catdesc = $catD->meta_description
    ];
}

Во-вторых, вы также сбрасываете значение $ myCustom с каждым циклом для каждого.Попробуйте это:

$myCustom = []  
foreach($seotemplates as $seotemplate){
    $myCustom[] = str_replace($a1, $catE, $seotemplate->categories_desc_template);
}

Это должно привести к тому, что вы получите массив seotemplates с замененными значениями, но я не проверял это.

...