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  

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

Debian升级

Debian 6(Squeeze)升级至Debian 7(Wheezy) (7级8同理)
Debian GNU/Linux支持滚动更新,出于安全方面的考虑,当新版Debian发行后,我们一般会将现有版本的Debian升级至最新的稳定版的Debian。升级除了可以提升系统的安全性以外,同时还可以获得由更新版本的应用软件带来的新功能及其它好处。这就是我们为什么要将Debian 6(Squeeze)升级至Debian 7(Wheezy)的原因。
继续阅读

Html5 canvas画svg

<html>
 <head>
  <title>test</title>
  <style>
  svg, canvas { margin:1em }
  </style>
 </head>
 <body>
  <p>
  <svg xmlns="http://www.w3.org/2000/svg" width="100px" height="100px" id="i">
  FAIL
  <circle cx="50px" cy="50px" r="50px" fill="lime"/>
  </svg>
  <canvas width="100" height="100" id="c">FAIL</canvas>
  </p>
  <script type="text/javascript">
      window.onload = function () {
          var ctx = document.getElementById("c").getContext('2d');
          var svg_xml = (new XMLSerializer()).serializeToString(document.getElementById("i")); 
          var img = new Image();
          img.src = "data:image/svg+xml;base64," + window.btoa(svg_xml);
          img.onload = function () {
              ctx.drawImage(img, 0, 0);
          };
      }
  </script>
 </body>
</html>