Typo3 extend page cache

HOOKS:

$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['tslib/class.tslib_fe.php']['createHashBase']['currency'] = 'EXT:sitebase/Classes/Hooks/HashHook.php:' . 'Top\\Sitebase\\Hooks\\HashHook->makeHash';
<?php
namespace Top\Sitebase\Hooks;

class HashHook
{
    /**
     * @param $params
     * @param $obj
     */
    public function makeHash(&$params, $obj)
    {
        $params['hashParameters']['currency'] = isset($_COOKIE['currency']) ? $_COOKIE['currency'] : 49;
    }
}

mysql 5.7 group by order by

It seems that all ORDER BY will be ignored if they stand in sub-query before GROUP BY in mysql 5.7.

I have the same issue in my query. I found work-around. You can add "ORDER BY" by key column. If id is primary key in your table, you can add

GROUP BY `id`
before

ORDER BY FIELD(lang, 'EN', 'JP')
Query:

`SELECT *
FROM
(
  SELECT  `id`, `category`, `name`, `number`, `lang`
  FROM `test`
  WHERE `category` = 'Cat1'
  GROUP BY `id`
  ORDER BY FIELD(lang, 'EN', 'JP')
) as table
GROUP BY number
ORDER BY number DESC`

Extbase standalone template

/** @var \TYPO3\CMS\Fluid\View\StandaloneView $fluidTemplate */
        $fluidTemplate = GeneralUtility::makeInstance('TYPO3\CMS\Fluid\View\StandaloneView');
        $fluidTemplate->setLayoutRootPaths(array(GeneralUtility::getFileAbsFileName('EXT:ext_contact_us/Resources/Private/Layouts/')));
        $fluidTemplate->setPartialRootPaths(array(GeneralUtility::getFileAbsFileName('EXT:ext_contact_us/Resources/Private/Partials/')));
        $fluidTemplate->setTemplatePathAndFilename(
            ExtensionManagementUtility::extPath('ext_contact_us') . 'Resources/Private/Templates/ContactUs/Show.html'
        );
        echo $fluidTemplate->render();

Extending Classes in TYPO3

As a TYPO3 extension developer you most certainly will experience situations where you want to extend existing classes, either from the TYPO3 core or from another extension. Fortunately, TYPO3 provides several ways to achieve just that:

Signals, Slots and Hooks

The preferred way of extending existing functionality should always be to use existing Signals and Hooks. Both provide a clearly defined extension interface to developers, which is why it’s pretty safe to use them.

继续阅读

android 4.x 无法启动

打包时app中超过了65536个方法,代码会编译不进一个dex包,所以需要用到multidex后,拆出两个dex包后能打包成功,但是4.x版本,app启动时只会load第一个dex包,不会自动去load第二个dex包,启动过程中如果用到第二个dex包中代码,就会直接报class not found。而5.x及以上版本会自动加载多个dex。
FIX:

   @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        MultiDex.install(this);
    }

extbase Property Mappers

Der neue Property Mapper

Was ist die Aufgabe eines Property Mappers?

Ein Property Mapper hat die Aufgabe, die Daten, die von Formularen an den Webserver gesendet werden in die korrekten Variablentypen zu konvertieren. Alle Daten eines Formulars werden entweder mit Hilfe von POST oder GET (Url) an den Server übertragen, aber diese Transportmethoden können nur mit Arrays und Texten umgehen. Wenn Ihr also in Eurem Formular ein Feld für das Alter einer Person habt und absendet, dann ist für den Server dieses Alter grundsätzlich erstmal ein Text und keine Zahl. Vielleicht habt Ihr aber auch ein Formular auf Eurer Webseite, auf dem Ihr die Beläge Eurer Pizza zusammenstellen könnt (Auswahl per Checkbox). In diesem Fall werden die Daten als Array an der Server übertragen. Solange diese Transportmethoden nicht zwischen Text und Zahl oder auch Array und Objekten unterscheiden können, seid Ihr die Einzigen die wissen von welchem Typ diese Daten sind. Ein Property Mapper kann Euch bei dieser Aufgabe helfen.
继续阅读

Composer 小技巧

Composer 是新一代的PHP依赖管理工具。其介绍和基本用法可以看这篇《Composer PHP依赖管理的新时代》。本文介绍使用Composer的五个小技巧,希望能给你的PHP开发带来方便。

1. 仅更新单个库
只想更新某个特定的库,不想更新它的所有依赖,很简单:

composer update foo/bar  

此外,这个技巧还可以用来解决“警告信息问题”。你一定见过这样的警告信息:
继续阅读