Plugin trotz nicht möglichem Template-Patch installieren

  • WCF 1

Achtung: Diese Seite ist nur noch Teil eines Archivs und wird in Zukunft entfernt.

Wenn man ein Plugin installieren möchte, das einen Template-Patch nutzt, kann es u.U. sein, dass die Installation mit einer Fehlermeldung abbricht.
Diese Fehlermeldung besagt, dass das Template schon verändert wurde. Normal - und hoffentlich - von einem anderen Plugin.

Eine entsprechende Fehlermeldung sieht z.B. so aus:
Das Anwenden eines Patches, der zu diesem Paket gehört, ist fehlgeschlagen, da dieser Patch nicht kompatibel zu seiner Zieldatei ist. Das Paket kann deshalb nicht installiert werden. Bitte klicken sie auf »Installation abbrechen«.
error message: Can't find an appropriate location for applying this hunk.
error code: 20015
affected template: /www/pfad/wcf/../templates/header.tpl
Mit etwas Können, was den Aufbau eines Plugins angeht, kann man dieses Problem allerdings umgehen. Dazu muss der Template-Patch manuell in das jeweilige Template eingefügt und gleichzeitig aus dem Paket entfernt werden. Danach installiert man dann einfach das Plugin ohne Template-Patch und es funktioniert.

Doch wie geht das genau?

Als erstes muss man herausfinden, was das Template genau patcht. Dafür muss man das Paket öffnen, am besten mit 7-Zip unter Windows (wird später nochmals benötigt). Man findet direkt im Paket oder in einem Unterordner namens z.B. "template" eine "template.diff" oder "templates.diff". Wichtig ist hier nur die Dateiendung *.diff. Diese muss man in einem Editor öffnen, ich empfehle hier Notepad++.
Im Falle meines Plugins "Willkommen zurück Meldung deaktivieren" sieht diese Datei dann so aus:

Smarty-Template

  1. --- C:/Program Files (x86)/Zend/Apache2/htdocs/wbb3.1/templates/header.tpl Tue Dec 15 14:09:28 2009
  2. +++ C:/Program Files (x86)/Zend/Apache2/htdocs/com.black-rider.wbb.deactivate.welcome/header_patched.tpl Tue Dec 15 13:31:38 2009
  3. @@ -202,7 +202,7 @@
  4. {if $this->user->activationCode && REGISTER_ACTIVATION_METHOD == 1}<p class="warning">{lang}wcf.user.register.needsActivation{/lang}</p>{/if}
  5. - {if $this->session->isNew}<p class="info">{lang}wbb.header.welcomeBack{/lang}</p>{/if}
  6. + {if $this->user->getPermission('user.board.deactivateWelcomeBack.canView')}{elseif $this->session->isNew}<p class="info">{lang}wbb.header.welcomeBack{/lang}</p>{/if}
  7. {if MODULE_PM == 1 && $this->user->showPmPopup && $this->user->pmOutstandingNotifications && $this->user->getOutstandingNotifications()|count > 0}
  8. <div class="info deletable" id="pmOutstandingNotifications">
  9. @@ -256,7 +256,7 @@
  10. {elseif !$this->session->spiderID}
  11. - {if $this->session->isNew}<p class="info">{lang}wcf.user.register.welcome{/lang}</p>{/if}
  12. + {if $this->user->getPermission('user.board.deactivateWelcomeBack.canView')}{elseif $this->session->isNew}<p class="info">{lang}wcf.user.register.welcome{/lang}</p>{/if}
  13. {/if}
  14. {if OFFLINE == 1 && $this->user->getPermission('user.board.canViewBoardOffline')}
Alles anzeigen
Hier sieht man dann in Zeile 7 und 8 sowie in Zeile 16 und 17, dass je eine Zeile entfernt und eine hinzugefügt wird. Diese Änderung muss man demnach am Template header (siehe Zeile 1) ändern. Ein - bedeutet immer ein Entfernen, ein + ein Hinzufügen von Zeichen. Es können auch mehrere Zeilen hintereinander mit einem + oder - versehen werden. D.h. dass mehrere Zeilen hinzugefügt oder entfernt werden müssen.

Normalerweise sind vor und nach den zu ändernden Zeilen noch drei weitere Zeilen angegeben, damit der Patch sein Ziel findet. Nach diesen sucht man am besten, wenn man das Template manuell ändert.
Vor jedem Patch steht dann noch eine Angabe, die man mit der Zeilenanzahl assoziieren könnte (siehe Zeile 3 und 12). Wie genau dieser Wert errechnet wird, weiß ich nicht, aber es ist nicht die genaue Zeilenzahl. Demnach darf man sich darauf nicht verlassen.


Ist der Template-Patch manuell am Template durchgeführt worden, muss man nun noch dafür sorgen, dass das Paket ihn nicht nochmals ausführt. Dazu öffnet man nochmals mit 7-Zip das entsprechende Plugin und entfernt die vorher geöffnete template.diff oder wie sie eben heißt. ;)
Danach öffnet man noch die package.xml in einem Editor. Auch hier empfehle ich Notepad++. Hier ist dann folgende Zeile zu finden:

XML-Quellcode

  1. <templatepatch>template/template.diff</templatepatch>
Je nach Pfad und Name sieht die Zeile natürlich etwas anders aus. Wichtig sind nur die Tags templatepatch. Diese Zeile entfernt man einfach aus der package.xml, speichert diese neu ab und packt sie mit 7-Zip neu in das Paket.

Danach sollte sich das Paket ganz normal über die Paketverwaltung als Plugin installieren lassen und dabei keine Fehlermeldung ausgeben.

Wichtig ist, dass man sich genau merkt, bei welchem Plugin man das macht. Gibt es ein Update, das bei dem Plugin etwas am Template-Patch ändert, muss man auch dieses entsprechend der Anleitung bearbeiten.
Wenn man das Plugin wieder deinstallieren möchte, muss man außerdem daran denken, den Template-Patch manuell wieder rückgängig zu machen, damit der Betrieb des Forums fehlerfrei garantiert werden kann.
Über den Autor
Ich bin Webentwickler in Stuttgart und administriere Server seit vielen Jahren. In diesem Blog erstelle ich hauptsächlich Tutorials für andere Webentwickler, Webdesigner und Serveradministratoren.
-------------------------------------------------------------------------------------------------------------------------------------
I’m a web developer in Stuttgart, Germany, and server administrator since many years. This blog mainly contains a tutorial set for other web developer, web designer and server administrators.

1.275 mal gelesen

Kommentare 0

Es wurden keine Einträge gefunden.