embed content into blog..

C++ JAVA
Post Reply
User avatar
vasilev
Потребител
Потребител
Posts: 646
Joined: Sat Feb 07, 2009 12:41 pm
Answers: 25
Location: Everywhere
Contact:

embed content into blog..

Post by vasilev » Thu Mar 05, 2020 10:30 am

Здравейте,
искам да заменя това:

[diagram=O7Jv536S]

със данни за тази диаграма от базата спрямо ID - 07Jv..
текстът може да е много голям който съдържа този стринг.
има ли някакъв универсален и по добър начин от следния:

if (strpos($text, 'diagram') !== false) {
... take text from "diagram=" to "]"
select from table;
remove text [diagram="ID"] със данните от базата
}

мерси !
by Revelation » Sat Mar 07, 2020 5:27 pm
Не не, остави масива. Кода с масива е само примерен. Това, което е отгоре е това, което ти трябва да имаш, а именно селект заявката.

Code: Select all

function getDiagramDataById($diagramId) {
    $query = "SELECT imgdata FROM ... WHERE id = :id";
    
    $qin = $dbh->prepare($query);
    $qin->execute([':id' => $diagramId]);

    if ($results = $qin->fetch(PDO::FETCH_ASSOC)) {
        $imageData = $results['imgdata'];

        if (!empty($imageData)) {
            return $imageData;
        }
    }

    return null;
}
Ето това ти е функцията. Вече си го нагласи, както ти си правиш заявката и т.н.
Go to full post

User avatar
anonimen
Web-tourist
Web-tourist
Posts: 1589
Joined: Mon Jun 11, 2012 6:07 pm
Answers: 163
Location: Parse error: unexpected "}" in /home/index.php on line 26

Re: embed content into blog..

Post by anonimen » Thu Mar 05, 2020 3:27 pm

:think: :think: :think:
Нещо не разбирам какво питаш.

User avatar
Revelation
Web-tourist
Web-tourist
Posts: 891
Joined: Sun Mar 24, 2013 1:23 pm
Answers: 63

Re: embed content into blog..

Post by Revelation » Thu Mar 05, 2020 6:08 pm

Какво може да съдържа този текст като знаци? Само букви и цифри?

Също, да разбирам, че това ще е нещо като bbcode някъде? В такъв случай ти трябва един regex да екстрактва това:

Code: Select all

#\[diagram=([a-z0-9]+)\]#i
Тест

User avatar
vasilev
Потребител
Потребител
Posts: 646
Joined: Sat Feb 07, 2009 12:41 pm
Answers: 25
Location: Everywhere
Contact:

Re: embed content into blog..

Post by vasilev » Fri Mar 06, 2020 8:36 am

да.. по добре да покажа какво съм направил :)
въпроса е има ли по-добър начин.

Code: Select all

if (strpos($zobj['text'], 'diagram') !== false) {
          $offset = 0;
          $text=$zobj['text'];
          while (($pos = strpos($text, 'diagram', $offset)) !== FALSE) {
            $offset   = $pos + 1;
            $desid=substr($text,($pos+8),8);
            if(!empty($desid)){
              $sqlin="SELECT imgdata FROM ...";
 ..
              if($zobjin = $qin->fetch(PDO::FETCH_ASSOC)){
                $desdata=$zobjin["imgdata"];
                $text=str_replace("[diagram=$desid]","<img style='max-width:100%;' src='$desdata'>",$text);
              }
            }     
          }
          echo $text;
        } else {
           echo $zobj['text'];
        }

User avatar
Revelation
Web-tourist
Web-tourist
Posts: 891
Joined: Sun Mar 24, 2013 1:23 pm
Answers: 63

Re: embed content into blog..

Post by Revelation » Fri Mar 06, 2020 6:37 pm

Има. Създал си напразни сложнотии.

Ето ти пример: http://sandbox.onlinephpfunctions.com/c ... eb5fcbfc06

Махаш всичко, което си дал. В getDiagramDataById() слагаш SELECT заявката и връщаш image data. Дал съм ти пример, който е закоментиран във функцията.

Ако искаш невалидни диаграми да бъдат премахвани изцяло замени регулярния израз с:

Code: Select all

#\[diagram=(.*?)\]#i


Ще сложа и кода тука, в случай, че линка някой ден си замине.

Code: Select all

<?php

$text =<<< TEXT
    Very very long text with digrams

    [diagram=89s900a9s8d77s]

    text text text

    [diagram=ivalid-id]

    text text

    [diagram=]

    [diagram=aasd0989009s8d]
TEXT;

function getDiagramDataById($diagramId) {
    // // Това замества твоя SELECT
    // $query = "SELECT ....";
    // // ...

    // if ($results = $qin->fetch(PDO::FETCH_ASSOC)) {
    //     $imageData = $results['imgdata'];

    //     if (!empty($imageData)) {
    //         return $imageData;
    //     }
    // }

    // return null;


    $diagrams = [
        'aasd0989009s8d' => "/image/aasd0989009s8d.jpg",
        '8s8s8d9a99sd7s' => "/image/8s8s8d9a99sd7s.jpg",
        '89s900a9s8d77s' => "/image/89s900a9s8d77s.jpg",
    ];

    if (!array_key_exists($diagramId, $diagrams)) {
        return null;
    }

    return $diagrams[$diagramId];
}

function replaceDiagramsWithImage($text) {
    return preg_replace_callback("#\[diagram=([a-z0-9]+)\]#i", function ($matches) {
        $imageData = getDiagramDataById($matches[1]);
        
        if ($imageData === null) {
            return null;
        }

        return "<img style='max-width:100%;' src='{$imageData}'>";
    }, $text);
}

$text = replaceDiagramsWithImage($text);

echo $text;

User avatar
vasilev
Потребител
Потребител
Posts: 646
Joined: Sat Feb 07, 2009 12:41 pm
Answers: 25
Location: Everywhere
Contact:

Re: embed content into blog..

Post by vasilev » Sat Mar 07, 2020 5:17 pm

Здравей,
Благодаря, да така е по-добре.
Само че снимките са base64 encoded .. забравих да напиша.
Ако ги вкарам в array , дали няма да вземат голям ресурс?

User avatar
Revelation
Web-tourist
Web-tourist
Posts: 891
Joined: Sun Mar 24, 2013 1:23 pm
Answers: 63

Re: embed content into blog..

Post by Revelation » Sat Mar 07, 2020 5:27 pm

Не не, остави масива. Кода с масива е само примерен. Това, което е отгоре е това, което ти трябва да имаш, а именно селект заявката.

Code: Select all

function getDiagramDataById($diagramId) {
    $query = "SELECT imgdata FROM ... WHERE id = :id";
    
    $qin = $dbh->prepare($query);
    $qin->execute([':id' => $diagramId]);

    if ($results = $qin->fetch(PDO::FETCH_ASSOC)) {
        $imageData = $results['imgdata'];

        if (!empty($imageData)) {
            return $imageData;
        }
    }

    return null;
}
Ето това ти е функцията. Вече си го нагласи, както ти си правиш заявката и т.н.

User avatar
vasilev
Потребител
Потребител
Posts: 646
Joined: Sat Feb 07, 2009 12:41 pm
Answers: 25
Location: Everywhere
Contact:

Re: embed content into blog..

Post by vasilev » Sat Mar 07, 2020 7:13 pm

мерси :)

uphero
Потребител
Потребител
Posts: 759
Joined: Mon Feb 20, 2012 12:26 pm
Answers: 32
Location: Казанлък
Contact:

Re: embed content into blog..

Post by uphero » Tue Mar 10, 2020 10:08 pm

Тоя блог ако е на базата на WP кода е и начина са грешни.

Post Reply