{"id":930,"date":"2018-02-27T17:27:02","date_gmt":"2018-02-27T16:27:02","guid":{"rendered":"http:\/\/evileu.de\/zum-schwarzen-pinguin\/?p=930"},"modified":"2018-02-27T17:34:10","modified_gmt":"2018-02-27T16:34:10","slug":"tagmapping-da-brauchts-ein-bisschen-vorarbeit","status":"publish","type":"post","link":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/2018\/02\/27\/tagmapping-da-brauchts-ein-bisschen-vorarbeit\/","title":{"rendered":"Tagmapping: da brauchts ein bisschen Vorarbeit"},"content":{"rendered":"<h2>Die grundlegende Mechanik zum programmatischen Einf\u00fcgen von Tags<\/h2>\n<p>Dank eines guten Tipps aus dem deutschen Joomla-Forum habe ich folgendes Codesnippet zum Laufen gekriegt. Es ordnet dem Artikel mit der ID 80 zwei Tags mit den IDs 7 und 9 zu. Der Knackpunkt war, dass man die IDs der zuzuordnenden Tags als Strings \u00fcbergeben muss &#8211; da musste auch erstmal draufkommen!<\/p>\n<pre>    $roh1 = 7;\r\n\u00a0\u00a0 \u00a0$roh2 = 13;\r\n\u00a0\u00a0 \u00a0$tag1 =strval($roh1);\r\n\u00a0\u00a0 \u00a0$tag2 =strval($roh2);\r\n\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$basePath = JPATH_ADMINISTRATOR.'\/components\/com_content';\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0require_once $basePath.'\/models\/article.php';\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$articlemodel = new ContentModelArticle(array('table_path' =&gt; $basePath . '\/tables'));\r\n\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$params = array(\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0'id' =&gt; 80,\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Article being tagged \r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0'tags' =&gt; array($tag1, $tag2)\u00a0\u00a0 \/\/ Tag IDs from #__tags to tag article with\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0);\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0if($articlemodel-&gt;save($params)){\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0echo 'Success!';\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0}<\/pre>\n<p>Jedenfalls, das ist schonmal eine gute Ausgangsbasis. Soweit ich das bislang beim Testen gesehen habe, werden die Tags immer neu zugeordnet, evtl. vorher zum Artikel schon angelegte Tags werden rausgeschmissen. Macht aber nix, wir arbeiten ja auf einer niegelnagelneuen Joomla-Installation, da sind jetzt erstmal noch keine Tags zugeordnet. Bevor wir diese Mechanik aber in unseren Artikelimport aus WordPress einbauen k\u00f6nnen, ist noch etwas Freiturnen auf der Datenbank angesagt. Ich geh da mal wieder den Weg \u00fcber Access, weil das doch etwas handlicher ist als MySQL.<\/p>\n<h2>Die Ausgangsbasis<\/h2>\n<p>Ich hab nochmal eine Einschr\u00e4nkung beschlossen, zu jedem Beitrag aus WordPress werden maximal zwei Kategorien exportiert, sonst ist mir das jetzt zu aufwendig.<\/p>\n<p>Erste Voraussetzung ist schonmal, dass wir alle Kategorien aus WordPress abgefasst und erfolgreich als Schlagw\u00f6rter nach Joomla importiert haben. Davon ziehe ich mir die #__tags-Tabelle nach Access ab und bastle mir eine Abfrage auf meine Tabelle mit den WordPress-Kategorien, der Join geht hier \u00fcber den Namen der Kategorie in WordPress auf den Titel des Tags in Joomla. Das funktioniert, weil die Schreibweisen identisch sind. Das Tagmapping sieht dann so aus:<\/p>\n<div id=\"attachment_932\" style=\"width: 592px\" class=\"wp-caption alignnone\"><img aria-describedby=\"caption-attachment-932\" decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-932\" src=\"http:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2018\/02\/tagmap_screenshot.jpg\" alt=\"tagmap_screenshot\" width=\"582\" height=\"586\" srcset=\"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2018\/02\/tagmap_screenshot.jpg 582w, https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2018\/02\/tagmap_screenshot-150x150.jpg 150w, https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2018\/02\/tagmap_screenshot-298x300.jpg 298w\" sizes=\"(max-width: 582px) 100vw, 582px\" \/><p id=\"caption-attachment-932\" class=\"wp-caption-text\">tagmap_screenshot<\/p><\/div>\n<p>Die term_id und der name kommen aus WordPress, title und id aus Joomla, das ist die Basis f\u00fcr unser Mapping.<\/p>\n<h2>Zuordnung der Kategorien zu den WordPress-Posts<\/h2>\n<p>Man braucht vier Tabellen, um die Zuordnung der Kategorien zu den einzelnen Beitr\u00e4gen in WordPress abzubilden, das sieht so aus:<\/p>\n<div id=\"attachment_933\" style=\"width: 784px\" class=\"wp-caption alignnone\"><img aria-describedby=\"caption-attachment-933\" decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-933\" src=\"http:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2018\/02\/wordpress_kat_post.jpg\" alt=\"wordpress_kat_post\" width=\"774\" height=\"385\" srcset=\"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2018\/02\/wordpress_kat_post.jpg 774w, https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2018\/02\/wordpress_kat_post-300x149.jpg 300w, https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2018\/02\/wordpress_kat_post-768x382.jpg 768w, https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2018\/02\/wordpress_kat_post-624x310.jpg 624w\" sizes=\"(max-width: 774px) 100vw, 774px\" \/><p id=\"caption-attachment-933\" class=\"wp-caption-text\">wordpress_kat_post<\/p><\/div>\n<p>Meine Tabelle published_posts ist ein schlanker Auszug aus der wp_posts und enth\u00e4lt nur ID, Titel und Content der ver\u00f6ffentlichten Rezepte. So kriege ich erstmal eine Liste aller Rezepte mit den zugeordneten Kategorien, wobei jedes Rezept so oft auftaucht wie es Kategorien hat:<\/p>\n<div id=\"attachment_934\" style=\"width: 741px\" class=\"wp-caption alignnone\"><img aria-describedby=\"caption-attachment-934\" decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-934\" src=\"http:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2018\/02\/alleposts_allekat.jpg\" alt=\"alleposts_allekat\" width=\"731\" height=\"503\" srcset=\"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2018\/02\/alleposts_allekat.jpg 731w, https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2018\/02\/alleposts_allekat-300x206.jpg 300w, https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2018\/02\/alleposts_allekat-624x429.jpg 624w\" sizes=\"(max-width: 731px) 100vw, 731px\" \/><p id=\"caption-attachment-934\" class=\"wp-caption-text\">alleposts_allekat<\/p><\/div>\n<p>Um das ganze jetzt auf zwei Kategorien pro Rezept einzuschr\u00e4nken, setze ich hierauf noch einmal eine Abfrage, in der jeweils nur der erste und der letzte Wert der Kategorien zu einem Rezept angezeigt wird :<\/p>\n<div id=\"attachment_935\" style=\"width: 667px\" class=\"wp-caption alignnone\"><img aria-describedby=\"caption-attachment-935\" decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-935\" src=\"http:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2018\/02\/ersterwert_letzterwert.jpg\" alt=\"ersterwert_letzterwert\" width=\"657\" height=\"369\" srcset=\"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2018\/02\/ersterwert_letzterwert.jpg 657w, https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2018\/02\/ersterwert_letzterwert-300x168.jpg 300w, https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2018\/02\/ersterwert_letzterwert-624x350.jpg 624w\" sizes=\"(max-width: 657px) 100vw, 657px\" \/><p id=\"caption-attachment-935\" class=\"wp-caption-text\">ersterwert_letzterwert<\/p><\/div>\n<p>Den PostContent hab ich mal weggelassen, sonst wirds so un\u00fcbersichtlich. Jetzt kann man noch den ersten und letzten Wert der term_id einblenden:<\/p>\n<div id=\"attachment_936\" style=\"width: 800px\" class=\"wp-caption alignnone\"><img aria-describedby=\"caption-attachment-936\" decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-936\" src=\"http:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2018\/02\/ersterletzterwert_termid.jpg\" alt=\"ersterletzterwert_termid\" width=\"790\" height=\"193\" srcset=\"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2018\/02\/ersterletzterwert_termid.jpg 790w, https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2018\/02\/ersterletzterwert_termid-300x73.jpg 300w, https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2018\/02\/ersterletzterwert_termid-768x188.jpg 768w, https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2018\/02\/ersterletzterwert_termid-624x152.jpg 624w\" sizes=\"(max-width: 790px) 100vw, 790px\" \/><p id=\"caption-attachment-936\" class=\"wp-caption-text\">ersterletzterwert_termid<\/p><\/div>\n<p>Hierzu Joine ich mir dann noch meine Mapping-Tabelle von oben und ziehe mir daraus die Joomla-Tag-IDs:<\/p>\n<div id=\"attachment_937\" style=\"width: 983px\" class=\"wp-caption alignnone\"><img aria-describedby=\"caption-attachment-937\" decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-937\" src=\"http:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2018\/02\/tagmapping_ausfuehrlich.jpg\" alt=\"tagmapping_ausfuehrlich\" width=\"973\" height=\"470\" srcset=\"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2018\/02\/tagmapping_ausfuehrlich.jpg 973w, https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2018\/02\/tagmapping_ausfuehrlich-300x145.jpg 300w, https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2018\/02\/tagmapping_ausfuehrlich-768x371.jpg 768w, https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2018\/02\/tagmapping_ausfuehrlich-624x301.jpg 624w\" sizes=\"(max-width: 973px) 100vw, 973px\" \/><p id=\"caption-attachment-937\" class=\"wp-caption-text\">tagmapping_ausfuehrlich<\/p><\/div>\n<p>Das sieht soweit ganz gut aus, jetzt k\u00f6nnen wir die \u00fcberfl\u00fcssigen Felder ausblenden, so dass nur der post_title, der post_content und die beiden Joomla-Tag-IDs \u00fcbrigbleiben. So, das wars. Damit erstelle ich mir meine neue Import-Tabelle. Ach so, den post_content hab ich unterwegs verloren, den holen wir uns jetzt wieder dazu, aber dann ist jetzt wirklich Finish.<\/p>\n<div id=\"attachment_939\" style=\"width: 761px\" class=\"wp-caption alignnone\"><img aria-describedby=\"caption-attachment-939\" decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-939\" src=\"http:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2018\/02\/mapping_endprodukt.jpg\" alt=\"mapping_endprodukt\" width=\"751\" height=\"534\" srcset=\"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2018\/02\/mapping_endprodukt.jpg 751w, https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2018\/02\/mapping_endprodukt-300x213.jpg 300w, https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2018\/02\/mapping_endprodukt-624x444.jpg 624w\" sizes=\"(max-width: 751px) 100vw, 751px\" \/><p id=\"caption-attachment-939\" class=\"wp-caption-text\">mapping_endprodukt<\/p><\/div>\n<p>Mit Access macht sowas richtig Spa\u00df! F\u00fcr die Import-Mechanik nach Joomla gibts jetzt aber einen neuen Beitrag, der hier ist lang genug.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Die grundlegende Mechanik zum programmatischen Einf\u00fcgen von Tags Dank eines guten Tipps aus dem deutschen Joomla-Forum habe ich folgendes Codesnippet zum Laufen gekriegt. Es ordnet dem Artikel mit der ID 80 zwei Tags mit den IDs 7 und 9 zu. Der Knackpunkt war, dass man die IDs der zuzuordnenden Tags als Strings \u00fcbergeben muss &#8211; [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[37,42,31,27,4,41,2],"tags":[],"_links":{"self":[{"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/posts\/930"}],"collection":[{"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/comments?post=930"}],"version-history":[{"count":3,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/posts\/930\/revisions"}],"predecessor-version":[{"id":941,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/posts\/930\/revisions\/941"}],"wp:attachment":[{"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/media?parent=930"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/categories?post=930"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/tags?post=930"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}