Graf nieskierowany to takie zwierzę, które ma węzły i krawędzie (ale bez szczałków):
Jeżeli zamiast a, b, c i d wrzucimy wpisy na blogu, a połączenia między nimi wyciągniemy z wtyczki YARPP, wówczas - przy odrobinie wysiłku - uzyskamy takie cóś:
Powyższy graf reprezentuje wszystkie wpisy na moim blogu na dzień 27 marca 2021.
Lekki zoom:
Nieco większy zoom:
Jak takiego cudaka uzyskać?
Mi się udało metodą prób i błędów, łącznie jakieś półtora godziny kombinowania.
Krok po kroku:
- Logujemy się na nasz serwer z blogiem przez ssh.
- Upewniamy się, że mamy zainstalowany pakiet
graphviz
(czyli:sudo apt -y install graphviz
) - Tworzymy plik
~/.my.cnf
i wpisujemy do niego:
[mysql] user = nazwa-uzytkownika-wordpress password = haslo-uzytkownika-wordpress
(użytkownika i hasło możemy sobie wyciągnąć z pliku wp-config.php w folderze instalacyjnym wordpressa)
- nadajemy plikowi
~/.my.cnf
odpowiednie uprawnienia:chmod 600 ~/.my.cnf
Powyższy trick umożliwi nam wykonywanie zapytań do bazy wordpressa bez konieczności podawania za każdym razem hasła.
- Tworzymy osobny folder, u mnie nazywa się on
ref
ale można go sobie nazwać dowolnie. Chodzi o to, żeby nie zaśmiecać sobie katalogu domowego. Wchodzimy do niego:cd ref
- Tworzymy cztery pliki:
dotheader.txt
,dotfooter.txt
,labels.sql
orazreferences.sql
.
dotheader.txt:
graph { rankdir=LR; node [nodesep=2.0; fontsize=11; shape=box]; graph [overlap=false; splines = true;];
dotfooter.txt:
}
(tak, zgadza się, jedna linia tekstu, z jednym znakiem: "}")
labels.sql:
select concat(y.reference_ID, ' [label="', replace(regexp_replace(p1.post_title, '[^0-9a-zA-ZżźćńąąśłęóŻŹĆŃĄŚŁĘÓ ]', ' '), ' ', ' '), '"]') ptptpt from wp_yarpp_related_cache y join wp_posts p1 on y.reference_id = p1.ID where p1.post_type = 'post' union select concat(y.ID, ' [label="', replace(regexp_replace(p2.post_title, '[^0-9a-zA-ZżźćńąąśłęóŻŹĆŃĄŚŁĘÓ ]', ' '), ' ', ' '), '"]') from wp_yarpp_related_cache y join wp_posts p2 on y.ID=p2.ID where p2.post_type = 'post';
references.sql:
select concat(y.reference_ID, ' -- ', y.ID) from wp_yarpp_related_cache y join wp_posts p1 on y.reference_id = p1.ID join wp_posts p2 on y.ID=p2.ID where p1.post_type='post' and p2.post_type='post';
- Mówiłem cztery pliki? Kłamałem! 🙂 Tworzymy teraz piąty plik, ja go sobie nazwałem
go.sh
:
!/bin/bash mysql -N -u nazwa-uzytkownika-wordpress -D nazwa-bazy-wordpress < ./labels.sql > labels.txt mysql -N -u nazwa-uzytkownika-wordpress -D nazwa-bazy-wordpress < ./references.sql > references.txt cat ./dotheader.txt ./labels.txt ./references.txt ./dotfooter.txt > out.dot sfdp ./out.dot -Tsvg > out.svg
Uwaga: w powyższym pliku upewniamy się, że wpisaliśmy poprawnie nazwę użytkownika oraz nazwę bazy danych wordpress (jedno i drugie możemy wyciągnąć z wp-config.php w katalogu instalacyjnym wordpressa)
- Nadajemy temu plikowi atrybut wykonywalności:
chmod +x ./go.sh
- Uruchamiamy go:
./go.sh
(enter)
Jeżeli wszystkie powyższe kroki wykonaliśmy bez błędów, powinniśmy dostać na wyjściu plik out.svg
z "mapką" naszego blogu.
Na razie mi się temat trochę przejadł, więc ewentualny ciąg dalszy odkładam na później. Kolejnym krokiem będzie zapewne zrobienie tej mapki w wersji klikalnej, ewentualnie osobne mapki dla poszczególnych kategorii, może jeszcze dodanie "ozdobników" w postaci tagów?
Ale to już innym razem.
Wygląda to interesująco, ale taki obrazek raczej nie jest przydatny. W przeciwieństwie do YARPP, który zainstalowałem. Dzięki!
Takie obrazki są przydatne głównie żeby uzyskać efekt “Wow!” – i to w zasadzie tyle. Natomiast samo odpytywanie tabeli wp_yarpp_related_cache do wyciągnięcia “zaprzyjaźnionych” wpisów już ma potencjał. Można na przykład pomyśleć o zrobieniu wtyczki, która wyświetla mini-mapkę blogu z bieżącym wpisem w centrum i dwoma czy trzema “skokami” (zamiast prostej YARPP-owej listy). I tak dalej.
W tym nowym, o kubłach na śmieci, zginęło Co pole “Dołącz do dyskusji”. Chciałem tam napisać, że szklane u nas zapełniają się w tydzień, ale nie mam jak.
Możesz to stąd wyciąć, aby nie śmieciło – nie ma takiego kubła…
Teraz powinno być OK. Nie wiem w sumie co było. Przed chwilą wyłączyłem tam komentarze i włączyłem z powrotem, powinno pomóc.
https://media.makeameme.org/created/hello-have-you-wiaiqa.jpg