Hauptmenü

Werkzeuge

Kategorien

Archiv

Einhell

Prefix im indexed_search Pager ausblenden / übersetzen

Erstellt in TS Schnipsel, TYPO3 am 14. Dezember 2018 vom Daschmi

In TYPO3 9 kann die Übersetzung von „Seite %d“ im Pager durch folgenden Language Key übersetzt werden:

plugin.tx_indexedsearch._LOCAL_LANG.default.displayResults.page =
plugin.tx_indexedsearch._LOCAL_LANG.de.displayResults.page =
plugin.tx_indexedsearch._LOCAL_LANG.fr.displayResults.page =
plugin.tx_indexedsearch._LOCAL_LANG.es.displayResults.page =
plugin.tx_indexedsearch._LOCAL_LANG.it.displayResults.page = 

Hier habe ich es im Beispiel ausgeblendet, damit nur die reine Zahl dargestellt wird.

Weiterhin gibt es noch folgende Schlüssel zum übersetzen:

plugin.tx_indexedsearch._LOCAL_LANG.default.displayResults.next =
plugin.tx_indexedsearch._LOCAL_LANG.default.displayResults.previous =

Nummern nach letzter Zahl/Zeichen alphabetisch oder numerisch hochzählen in VisualBasic / VB

Erstellt in Allgemein am 10. Dezember 2018 vom Daschmi

Hat man eine Nummer und möchte dynamisch eine Folgenummer bilden, die sich nach dem letzten Zeichen richtet, kann man in Visual Basic folgende Funktion verwenden:

Imports System.Text.RegularExpressions

Module VBModule

    Function NextLetter(c As String) As String

        If c = "Z" Then

            Return "Z-1"

        ElseIf c = "z" Then

            Return "z-1"

        End If

        Return Chr(Asc(c) + 1)

    End Function

    Function NextNr(ByVal val As String) As String

        Dim regPatternNumber As String = "\d+$"
        Dim regNumber As Regex = New Regex(regPatternNumber)
        Dim matchNumber As Match = regNumber.Match(val)

        Dim regPatternChar As String = "[A-Za-z]+$"
        Dim regChar As Regex = new Regex(regPatternChar)
        Dim matchChar As Match = regChar.Match(val)

        If matchNumber.Success Then

            Dim NextNumber As Integer = Convert.toInt32(matchNumber.value)
            NextNumber = NextNumber + 1

            Return Regex.Replace(val, regPatternNumber, cstr(NextNumber))

        ElseIf matchChar.Success Then

            Return Regex.Replace(val, regPatternChar, NextLetter(matchChar.value))

        Else

            Return val + "-1"

        End If

        Return "_"

    End Function

    Sub Main()

        Console.WriteLine(NextNr("A/1"))
        Console.WriteLine(NextNr("A/1/B"))
        Console.WriteLine(NextNr("A/1/Z"))
        Console.WriteLine(NextNr("A/1/["))
        Console.WriteLine(NextNr("A/1/10"))

    End Sub

End Module

Die gleiche Funktion in PHP findet man hier.

Funktion um manuelle Nummern hochzuzählen

Erstellt in PHP am 23. November 2018 vom Daschmi

Mit folgender Funktion können Nummern hochgezählt werden, die aus Zahlen und Buchstaben bestehen können. Bei Buchstaben wird der nächste Buchstabe im Alphabet genommen, bei Zahlen die letzte Zahl der Nummer erhöht. Sollte keine Zahl oder Buchstabe am Ende der Nummer stehen, so bekommt die Nummer das Suffix „-1“.

abstract class DS {

   public static function getNextNumber($prevNumber) {
               
      $prevNumber = trim($prevNumber);
      
      if (strlen($prevNumber) <= 0) return "1";            
      
      preg_match('/\d+$/', $prevNumber, $mNumberic);
      preg_match('/[A-Za-z]+$/', $prevNumber, $mCharacter);
      
      if (isset($mNumberic[0]) && intal($mNumberic[0]) > 0) {
            
            return preg_replace('/\d+$/', intval($mNumberic[0]) + 1, $prevNumber);
            
      } else if (isset($mCharacter[0]) && strlen($mCharacter[0]) > 0) {

            return preg_replace('/[A-Za-z]+$/', ++ $mCharacter[0], $prevNumber);
            
      } else {
            
            return $prevNumber.'-1';
            
      }
      
   }

}

Ausgabe:

DS::getNextNumber("") => "1"
DS::getNextNumber("1") => "2"
DS::getNextNumber("100") => "101"
DS::getNextNumber("ABC/2/CED-100") => "ABC/2/CED-101"
DS::getNextNumber("ABC/2/CEE") => "ABC/2/CEF"
DS::getNextNumber("B") => "C"
DS::getNextNumber("Z") => "AA"
DS::getNextNumber("12B") => "12C"
DS::getNextNumber("12-B") => "12-C"
DS::getNextNumber("12-B/") => "12-B/-1"
DS::getNextNumber("A") => "ZZ"

Die gleiche Funktion für VisualBasic findet man hier.

TYPO3 9 (9.5) page slug für manuell erstellte Seiten ermitteln und setzen

Erstellt in Extension Entwicklung, TYPO3 am 6. November 2018 vom Daschmi

Mit folgender Funktion kann für Seiten der zugehörige Page slug mittels TYPO3 Funktionen ermittelt und gesetzt werden.

public static function setPageSlug($uid) {

$fieldConfig = $GLOBALS['TCA']['pages']['columns']['slug']['config'];
$slugHelper = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Core\DataHandling\SlugHelper::class, 'pages', 'slug', $fieldConfig);

$connection = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Core\Database\ConnectionPool::class)->getConnectionForTable('pages');
$queryBuilder = $connection->createQueryBuilder();

$queryBuilder->getRestrictions()->removeAll()->add(\TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Core\Database\Query\Restriction\DeletedRestriction::class));
$statement = $queryBuilder->select('*')->from('pages')->where(
$queryBuilder->expr()->eq('uid', $uid)
)->execute();

$record = $statement->fetch();

$slug = $slugHelper->generate($record, $record['pid']);

// Update
$queryBuilder = $connection->createQueryBuilder();
$queryBuilder->update('pages')->where(
$queryBuilder->expr()->eq('uid', $uid)
)->set('slug', $slug)->execute();

return $slug;

}

Bug in WordPress 4.9.8 / Multiblog / Multissite

Erstellt in Allgemein am 2. November 2018 vom Daschmi

Es gibt einen Bug in WordPress Version 4.9.8. Hat man einen Blog mit dem Namen „musterblog“ und möchte im Hauptblog eine Seite anlegen die den Namen „Musterblog“ tragen soll, so wird das verhindert. Das ist auch gut so, da es zum URL Konflikt kommen würde. Legt man jetzt aber eine Seite und möchte darunter eine Seite mit Namen „Musterblog“ anlegen kann die URL auch nicht ermittelt werden. Die Funktion avoid_blog_page_permalink_collision denkt immer es gibt eine Kollision und hängt einen Suffix an. Ich habe es für mich erstmal so gelöst, dass ich die Funktion angepasst habe so dass Unterseiten ignoriert werden.


/**
* Avoids a collision between a site slug and a permalink slug.
*
* In a subdirectory installation this will make sure that a site and a post do not use the
* same subdirectory by checking for a site with the same name as a new post.
*
* @since 3.0.0
*
* @param array $data An array of post data.
* @param array $postarr An array of posts. Not currently used.
* @return array The new array of post data after checking for collisions.
*/
function avoid_blog_page_permalink_collision( $data, $postarr ) {

if ( is_subdomain_install() )
return $data;
if ( $data['post_type'] != 'page' )
return $data;
if ( !isset( $data['post_name'] ) || $data['post_name'] == '' )
return $data;
if ( !is_main_site() )
return $data;

// Daschmi: 02.11.2018
// If page is a subpage, no check of collision
if ($data['post_parent'] > 0) return $data;

$post_name = $data['post_name'];
$c = 0;
while( $c < 10 && get_id_from_blogname( $post_name ) ) {
$post_name .= mt_rand( 1, 10 );
$c ++;
}
if ( $post_name != $data['post_name'] ) {
$data['post_name'] = $post_name;
}
return $data;
}

Die Funktion findest sich unter /wp-admin/includes/ms.php

Google Maps Karte um Land zoomen

Erstellt in Allgemein am 28. Oktober 2018 vom Daschmi

Möchte man eine Google Maps Karte um die Koordinaten eines einzelnen Landes zentrieren, so kann man folgenden Code verwenden:

geocoder = new google.maps.Geocoder();
geocoder.geocode( { 'address': 'Germany'}, function(results, status) {
if (status==google.maps.GeocoderStatus.OK) {
map.setCenter(results[0].geometry.location);
map.fitBounds(results[0].geometry.viewport);
}
} );

Typo3 EXT:NEWS Back Link / Zurück Link dynamisch übergeben

Erstellt in Allgemein am 25. Oktober 2018 vom Daschmi

Im Typoscript muss folgendes definiert werden:

plugin.tx_news.settings.useStdWrap = backPid,actbackPid
plugin.tx_news.settings.backPid.data = GP:tx_news_pi1|actbackPid
plugin.tx_news.settings.actbackPid = TEXT
plugin.tx_news.settings.actbackPid.data = page:uid

Nun hat man in den Templates settings.actbackPid zur Verfügung und muss es noch an die Links zur Einzelansicht anfügen:

<n:link newsItem="{newsItem}" settings="{settings}" class="more" title="{newsItem.title}" configuration="{additionalParams:'&tx_news_pi1[actbackPid]={settings.actbackPid}'}">
<f:translate key="more-link"/>
</n:link>

Siehe auch:

Typo3 Dokumentation der EXT:news

TYPO3 9 .html Suffix an URLs

Erstellt in TYPO3 am 23. Oktober 2018 vom Daschmi

Damit „.html“ als Suffix/Endung vom TYPO3 an eine URL gehängt wird, kann man in der Site Konfiguration folgende Routenerweiterung nutzen:

routeEnhancers:
PageTypeSuffix:
type: PageType
default: '.html'
map:
'.html': 0

Die URL ist dann über

/kontakt.html und /kontakt aufrufbar. Um Double Content zu vermeiden, kann man in einer .htaccess folgende Umleitung verwenden (oder die canonical URL nutzen)

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !\.html$
RewriteRule ^(.*)$ /$1.html [R,L]

ext_conf_template.txt in TYPO3 Version 9

Erstellt in TYPO3 am 22. Oktober 2018 vom Daschmi

Wer die Extensionkonfiguration aus der Datei ext_conf_template.txt im Root Verzeichnis der Erweiterung im Extension Manager sucht, wird ab Version 9 dort nicht mehr fündig. Die Einstellungen der Extension können jetzt im Install Tool unter Einstellung -> Extension Konfiguration eingesehen und bearbeitet werden.