Hallo,
ich habe folgende Anforderung:
the customer need a own URL Creator with following requirements:
- "/privat/" should be replaced with "/" on the whole website
- "/index.jsp" should be replaced with "/" on the whole website
Also habe ich für den ersten Punkt den Code so modifiziert dass /privat/ ersetzt wird und funktioniert.
Siehe hier:
@Override
public String getUrl(final ContentProducer contentProducer, final TemplateSet templateSet, final Language language, final PageParams pageParams) {
final String name = getName(contentProducer, templateSet, language, pageParams);
final String extension = contentProducer.getExtension(templateSet);
int len = name.length();
if (extension.length() > 0) {
len += extension.length();
len++;
}
final StringBuilder buffer = new StringBuilder(0);
final String path = this._pathLookup.lookupPath(contentProducer, language, templateSet);
if (path != null) {
buffer.ensureCapacity(len + path.length() + 2);
buffer.append('/');
if (path.length() > 0) {
buffer.append(path);
buffer.append('/');
}
} else {
collectPath(contentProducer.getParent(), language, templateSet, len, buffer);
}
buffer.append(name);
if (extension.length() > 0) {
buffer.append('.');
buffer.append(extension);
}
String result = buffer.toString();
result = result.replaceFirst("/privat/", "/");
return result;
}
Für den zweiten Punkt steht in der Dokumentation:
stripWelcomeFileNames
Der Parameter „stripWelcomeFileNames“ ist nur relevant, wenn die verwendete URL-Pfadstrategie auch den Konfigurationsparameter useWelcomeFileNames
verwendet. Mithilfe des Parameters „stripWelcomeFileNames“ kann die
durch „useWelcomeFileNames“ ergänzte Extension „/index.*“ aus der
Advanced URL entfernt werden (aber nicht aus dem Dateinamen, unter dem
die Seite im Dateisystem abgelegt wird).
factorySettings = new HashMap();
factorySettings.put("usewelcomefilenames", "true");
factorySettings.put("stripwelcomefilenames", "true");
context.setProperty("#urlCreatorSettings", factorySettings);
Funktioniert auch mit "index.html"
Eine weitere Anmerkung besagt:
Die Referenzimplementierung AdvancedUrlFactory unterstützt die
Funktionalität „stripWelcomeFileNames“ nur für Dateierweiterung vom Typ
„html“. Sollen weitere Dateiendungen unterstützt werden, muss die
Referenzimplementierung projektspezifisch angepasst werden
OK, für "index.jsp" muss ich es wohl selbst implementieren und habe folgendes angepasst:
private String getName(final ContentProducer contentProducer, final TemplateSet templateSet, final Language language, final PageParams pageParams) {
if (((contentProducer instanceof PageRef)) && ((pageParams instanceof ContentMultiPageParams.ContentPageParams)) && (pageParams.getSize() == 1)) {
final Content2Params content2Params = ((PageRef) contentProducer).getContent2Params();
if (content2Params != null) {
String varName = content2Params.getSitemapVariableName();
if (varName != null) {
if (varName.endsWith("*")) {
varName = varName.substring(0, varName.length() - 1);
}
final ContentMultiPageParams.ContentPageParams contentPageParams = (ContentMultiPageParams.ContentPageParams) pageParams;
final List<Entity> list = contentPageParams.getData();
if (list.size() > 0) {
final Entity entity = list.get(0);
final String result = ContentUtil.resolve(entity, varName, language, null);
if ((result != null) && (!result.isEmpty())) {
return cleanup(result);
}
}
}
}
}
if ((this._welcomeFileMode != WelcomeFileMode.DISABLED) && (("html".equals(templateSet.getExtension()))||("jsp".equals(templateSet.getExtension()))) && (pageParams.getIndex() == 0) && (!(pageParams instanceof ContentMultiPageParams.ContentPageParams))) {
final SiteStoreFolder folder = (SiteStoreFolder) contentProducer.getParent();
if ((folder != null) && (contentProducer.equals(folder.getStartNode())) && (createIndexFile(templateSet, contentProducer.getProject()))) {
return "index";
}
}
final String name = getName(contentProducer, language);
final String pageSuffix = pageParams.getPageSuffix();
if (pageSuffix.length() > 0) {
return name + '_' + pageSuffix;
}
return name;
}
private boolean createIndexFile(final TemplateSet templateSet, final Project project) {
if (this._welcomeFileMode == WelcomeFileMode.FOR_ALL_HTML_CHANNELS) {
return true;
}
for (final TemplateSet set : project.getTemplateSets()) {
if ("html".equals(set.getExtension())) {
return templateSet.equals(set);
}
if ("jsp".equals(set.getExtension())) {
return templateSet.equals(set);
}
}
return false;
}
Leider ohne Erfolg.
Hat jemand eine Idee was ich noch anpassen/ändern muss ?
Viele Grüße
Joachim Graf