TYPO3 LTS 9

Aus Vosp.info
Wechseln zu: Navigation, Suche

Typo3

Benötigte Software & Konfiguration

apt-get install imagemagick  wget bash-completion zip unzip  apache2 libapache2-mod-php7.2 php7.2-cli  php7.2 php7.2-common  php7.2-imap php7.2-intl php7.2-mysql php7.2-readline  php7.2-soap php7.2-zip php7.2-zip php7.2-gd php7.2-xml php7.2-gd php7.2-json php7.2-opcache php-imagick  php7.2-curl php7.2-mbstring php7.2-bcmath php7.2-gmp php7.2-zip mysql-server composer

a2enmod deflate rewrite headers mime expires ssl

mysql_secure_installation

USE mysql;
UPDATE user SET plugin='mysql_native_password' WHERE User='root';
FLUSH PRIVILEGES;
exit;

#Falls Die Sicherheit für Passwörte nachträglich geändert werden muss.
mysql$ SHOW VARIABLES LIKE 'validate_password%';

mysql$ SET GLOBAL validate_password_policy=LOW;

vim /etc/mysql/mysql.conf.d/mysqld.cnf
#add 
[mysqld]
validate_password_policy=LOW





Typo3 Grundinstallation

cd in /var/www/domain
git clone https://github.com/TYPO3/TYPO3.CMS.git
cd TYPO3.CMS/
git fetch --tags
git tag --list
git checkout tags/v.9.5.1
#Externe Bibliotheken installieren
composer install

cd ..
ln -s TYPO3.CMS typo3_src
ln -s typo3_src/typo3 typo3
ln -s typo3_src/index.php .
touch FIRST_INSTALL



# /etc/php/7.2/apache2/php.ini
max_execution_time = 240
max_input_vars = 1500

Module

Sites

Sprachen lanugages

Achtung, derzeit existiert ein language fallback BUG :( 
https://forge.typo3.org/issues/86762
Seiten welche noch nicht übersetzt sind, kommen auf ne 404 Seite 
  1. erstmal müssen Sprachen angelegt werden auf der Seite 0 (ganz ganz oben in der Seiten Hierrachie) ... dann kann angefangen werden Sprachen über Sites zu konfigurieren
  2. die Startseite (auch wenn nur Verweis) muss übersetzt werden mit dem Seiten oder Listen Modul
page = PAGE
page {
	10 = FLUIDTEMPLATE
	10 {
		dataProcessing {

			120 = TYPO3\CMS\Frontend\DataProcessing\LanguageMenuProcessor
			120 {
			  languages = auto
			  as = ncMenuLanguage
			}

		}
	} 
}

Extensions

scheduler

über EM Local

vhs

über EM Repository

includekrexx

über EM Repository

ws_scss

git clone https://github.com/svewap/ws_scss.git

gridelements

git clone https://github.com/TYPO3-extensions/gridelements.git

t3sbootstrap

lang (Sprache)

Die Sprachkonfiguration wurde in das installtool verlegt


alte Extension Anpassungen

@inject => @TYPO3\CMS\Extbase\Annotation\Inject
@ignorevalidation => @TYPO3\CMS\Extbase\Annotation\IgnoreValidation


render Mode deprecated

<f:flashMessages renderMode="div" />
<f:flashMessages  />

htmlEscape="false" deprecated

<f:translate key="email_user_salutation" htmlEscape="false"/>
<f:translate key="email_user_salutation" />

<f:translate key="email_user_salutation" htmlEscape="false"/>,

netz.coop Extensions

anclib

ancbasic

Konfiguration:

Beispiel Seitenbaum

id:0 nctypo

  • id:1; Typ: Standard; Verhalten: Als Anfang der Website benutzen; Ressourcen: ancbasic; Erscheinungsbild > Backend-Layout ancbasic layout template; add Template enthält fluid_styled_content,gridelements, t3sbootstrap, anclib, ancbasic
    • id:2; Typ: Ordner; Name: menu_main
      • id:4: Typ: Seite; Name: Seite 1
      • id:5: Typ: Seite; Name: Seite 2
        • id:7: Typ: Seite; Name: Seite 2.1
        • id:8: Typ: Seite; Name: Seite 2.2
        • id:9: Typ: Seite; Name: Seite 2.3
      • id:6: Typ: Seite; Name: Seite 3
    • id:3; Typ: Ordner; Name: menu_footer
      • id:10: Typ: Seite; Name: Kontakt
      • id:11: Typ: Seite; Name: Impressum
      • id:12: Typ: Seite; Name: Sitemap
      • id:13: Typ: Seite; Name: Datenschutz


Speaking URLS

Site management => Sites


Source Code Änderungen - deprecated ...

@TYPO3\CMS\Extbase\Annotation\Inject not @inject


Query Builder

Klassen

use TYPO3\CMS\Core\Database\ConnectionPool;
use TYPO3\CMS\Core\Database\Query\QueryBuilder;
use TYPO3\CMS\Core\Utility\GeneralUtility;

queryBuilder

$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)
 ->getQueryBuilderForTable('tt_news');

FROM

$qB = $queryBuilder->from('tt_news', 'n');

WHERE

$qB->where(
      $queryBuilder->expr()->eq('pid', (int) $store_page_id)
);

$qB->andWhere(
 '  n.ncindexcontent like \'%' . $searchword . '%\' '
 );

Komplexe Abfragen

join
$qB->join(
     'n',
     'tt_news_cat_mm',
      'p2c' . $join_i,
       $queryBuilder->expr()->andX(
         $queryBuilder->expr()->eq('p2c' . $join_i . '.uid_local', $queryBuilder->quoteIdentifier('n.uid')),
         $queryBuilder->expr()->in('p2c' . $join_i . '.uid_foreign', trim(implode(",", $ORCategoriesArray),','))
        )
);


Equal
$qB->andWhere(
   $qB->expr()->eq('mm.uid_local', $uid)
);


Equal OR Equal
$qB->andWhere(
      $qB->expr()->orX(
           $qB->expr()->eq('nc.parent_category', 1),
           $qB->expr()->eq('nc.uid', 2)
      )
);


LIKE =
$qB->where(
     $qB->expr()->like(
            'email',
            $qB->createNamedParameter('%' . $qB->escapeLikeWildcards($domain) . '%')
      )
);
Limit
$qB->setMaxResults(10);
Offset
$qB->setFirstResult(20);
Select
$qB->select('*', 'n.uid as uid');
Order By
$qB->orderBy('crdate', 'DESC');
Ausführen
$rows = $qB->execute()->fetchAll();

Count Distinct AS COUNT

 $qB->addSelectLiteral(
    $queryBuilder->expr()->count('n.uid', 'count')
);
Count Ausführen
$rows = $qB->execute()->fetch();


Wenn Querybuilder keine Option ist

Klassen

use TYPO3\CMS\Core\Database\ConnectionPool;
Individuelle SELECT Abfragen
 protected $connectionPool;
  /**
     * @param string $table
     *
     * @return \TYPO3\CMS\Core\Database\Connection
     */
    protected function getConnection(string $table)
    {
        if (empty($this->connectionPool)) {
            $this->connectionPool = GeneralUtility::makeInstance(ConnectionPool::class);
        }

        return $this->connectionPool->getConnectionForTable($table);
    }

... 

 $statement =  'SELECT * fe_users.email  from fe_users   WHERE	 activated_on>0  ORDER BY domains ASC';
 $rows= $this->getConnection('fe_users')->executeQuery($statement)->fetchAll(\PDO::FETCH_BOTH);