RealURL Configuration für mehrere Umgebungen (Bspw. Dev, Quality, Production)

Man kann eine bestimmte Konfiguration zum Setzen des Pfadsegemntes in RealURL auch auf mehrere PIDs erstellen.
Dies ist z.B. ein Problem wenn man mehrere Website-Versionen (z.B. Development, Quality und Production) hat, die Page IDs aber aufgrund unterschiedlicher Entwicklungen nicht mehr gleich sind.

Als Lösung habe ich es im Moment so gamcht, das eine bestimmte Konfiguration für eine Extbase-Extension auf mehreren PIDs konfiguriert ist:

Beispiel:

'myextConfiguration' => array(
		array(
				'GETvar' => 'tx_myext_myview[Supplier]',
				'lookUpTable' => array(
						'table' => 'tx_myext_domain_model_supplier',
						'id_field' => 'uid',
						'alias_field' => 'supplier',
						'addWhereClause' => ' AND deleted=0 AND (sys_language_uid=0 OR sys_language_uid=-1) ',
						'useUniqueCache' => 1,
						'useUniqueCache_conf' => array(
								'strtolower' => 1,
								'spaceCharacter' => '-'
						),
				)
		),
		array(
				'GETvar' => 'tx_myext_mview[action]',
				'noMatch' => 'bypass', // also removes the chash... Is this good ? items are cashed without it !?
		),
		array(
				'GETvar' => 'tx_myext_mview[controller]',
				'noMatch' => 'bypass'
		),
),
   '354' => 'myextConfiguration',  // Test (Development)
   '331' => 'myextConfiguration', // Quality

Ob dies ideal ist, kann ich noch nicht sagen. Die Config ist dann ja auf beiden Seiten für mehrere PIDs zumindest möglich. Könnte m.E. einen minimalen Einfluss auf die Performance haben durch mehr Berechnungen von RealURL beim aufbau der URL.

Vllt. hat jemand auch eine noch idealere Lösung ? Dann gerne ein Posting hinterlassen…

Mehrsprachigkeit – einzelne Seite in abweichender Sprache – Links in default-Sprache generieren

Es kann bei internationalen Websites vorkommen, dass es einzelne Seiten in einer abweichenden Sprache gibt. z.B. Gesamte Website englisch, einzelne Unterseite in franzöisch, italinisch o.ä..
Nun wird aber auf diesen einzlnen Seiten der gesetzte Sprachparameter L auch an die Navigation weitergereicht obwohl es den Rest der Website gar nicht in französich, italienisch o.ä. gibt.

Inhaltstechnisch würde zwar trotz falschem Sprachparamter aufgrund von „Content-Fallback“ der korrekte Inhalt angezeigt werden, aber SEO mäßig wäre es eine Katastrophe, wenn gleiche Inhalte unter mehreren URLs verfügbar wären (Also z.B. die URLs en/company, fr/company, it/company alle denselben Inhalt hätten).

Dies kann man per Extension-Template auf der sprachlich abweichenden Seite eingrenzen, indem man die von dort abgehenden Links auf eine Default-Sprache reduziert:
Typoscript:

    [globalVar = GP:L = 3]
    // erlaubte Sprachen eingrenzen
    config.linkVars = L(0-1)
    [global]

Diese Lösung funkioniert auch mit realURL.

Extension Records als Navigationspunkte in die Navigation einbauen

Will man in eine bestehende Navigation die aus normalen TYPO3 Pages besteht an bestimmter Stelle Extension Records ausgeben und verlinken, z.B. die Namen von Produktkategorien, so lässt sich das mithilfe der TYPOSCRIPT Funktion itemArrayProcFunc realisieren:

In TS der normatlen Navigation sind folgende Zeilen dafür zustängig:

1 = TMENU
1 {
   wrap = <ul class="nav navbar-nav">|</ul>
  expAll = 1
  // your nav typical codes here
}
2 = TMENU
2 {
 wrap = <ul class="dropdown-menu" role="menu">|</ul>
 expAll = 1

 // fluppt jetzt auch endlich unter T3 7.6 !
 // die Ext "myincludes" muss zuvor installiert werden
 itemArrayProcFunc = YourVendor\Myincludes\Myincludes->processnav
 itemArrayProcFunc.parentPageId = 120 
 itemArrayProcFunc.detailPageId = 177

Wenn in der 2.Ebene der Nav die Seite 120 gefunden wird, wird das Submenu ausgegeben.

Die eigentliche Funktion die im TS aufgerufen wird, findet sich in der selbst zu erstellenden Extension „Myincludes“, die etwa folgenden Code enthält:

<?php
namespace YourVendor\Myincludes;

class Myincludes  extends \TYPO3\CMS\Frontend\Plugin\AbstractPlugin {

  public function processnav($menuArr, $conf) {

    $pObj = $conf['parentObj'];
    $parentPageId = $pObj->id;

    // Unterhalb dieser Seite sollen die Records eingefügt werden
    if (120 == $parentPageId) { // fix to 120 ex $conf['parentPageId']

      $detailPageRow = $GLOBALS['TSFE']->sys_page->getPage($conf['detailPageId']);

      if (is_array($detailPageRow)) {
        $getVars = $_GET;
        $table = 'tx_yourextension_domain_model_soundso';
        $cObj =  \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer');

        $entries = $GLOBALS['TYPO3_DB']->exec_SELECTgetRows('categoryname,uid,pid', $table, ' deleted=0 AND hidden=0','industriename ASC'); // AND sys_language_uid=-1 !

        foreach ($entries as $entry) {

          // record overlay für Übersetzungen - brauchen wir nicht !
          // $entry = $GLOBALS['TSFE']->sys_page->getRecordOverlay($table, $entry, $GLOBALS['TSFE']->sys_language_uid);
          $item = $detailPageRow;
          $item['title'] = $entry['categoryname'];
          $item['nav_title'] = $entry['categoryname']; // same in language overlay!?


          // Link zur Detailansicht des Records generieren
          // &no_cache=1&L=0&idIndustry=1
          $url = $cObj->typoLink_URL(array(
            'parameter' => $conf['detailPageId'],
            'additionalParams' => '&' . http_build_query(array(
                'idCategory' => $entry['uid'],
                'L' => 0,

              ))
          ));

          $item['_OVERRIDE_HREF'] = $url;
          $item['ITEM_STATE'] = 'NO';

          if ($entry['uid'] == $getVars['idIndustry'])
            $item['ITEM_STATE'] = 'ACT';

          $menuArr[] = $item;
        }
      }
    }

Teile eines Plugins ungecached ausgeben im Extbase & Fluid Context

Im Gegensatz zum früheren USER_INT bzw. USER setzen des gesamten Plugins bei den pi-based extensions gibt es im Extbase & Fluid Context die Möglichkeit komplette Actions als „uncached“ einzutragen in der ext_localconf.php.

Eine weitere Möglichkeit noch kleinere Teile ungecached auszugeben ist die option
<f:render.uncache partial="..." />
im Fluid Template.