Hatena::Groupasakura

浅倉卓司@blog風味? このページをアンテナに追加 RSSフィード

Error : RSSが取得できませんでした。

2013-01-16(Wed)

symfonyでスマホの時にスタイルシートやJavascriptを切り替えたい時はどうするのが正しいんだろ。

| symfonyでスマホの時にスタイルシートやJavascriptを切り替えたい時はどうするのが正しいんだろ。 - 浅倉卓司@blog風味? を含むブックマーク symfonyでスマホの時にスタイルシートやJavascriptを切り替えたい時はどうするのが正しいんだろ。 - 浅倉卓司@blog風味? のブックマークコメント

 時間も無いので下記のようなヘルパープラグイン作ってテンプレートに仕込んでみたんだけど、これでいいのかな。

(PC用がfoo.cssやbar.jsの時に、スマホの時はfoo_sp.cssやbar_sp.jsに変えて出力する)

 いちおう切り替わっているみたいだけど。微妙に気持ち悪い。


SmartphoneHelper.php

<?php

function smartphone_header_scripts($suffix = "_sp")
{
    $ua = $_SERVER['HTTP_USER_AGENT'];
    $regex = '/(iPhone|Android)/';
    $is_smartphone = preg_match($regex, $ua);
    if (! $is_smartphone) return;

    $r = sfContext::getInstance()->getResponse();

    $stylesheets = $r->getStylesheets();
    foreach ($stylesheets as $file => $opt) {
        $r->removeStylesheet($file);
        $r->addStylesheet($file . $suffix, '', $opt);
    }

    $javascripts = $r->getJavascripts();
    foreach ($javascripts as $file => $opt) {
        $r->removeJavascript($file);
        $r->addJavascript($file . $suffix, '', $opt);
    }
}


ヘッダ部のあるテンプレートに下記を追加


<?php use_helper('Smartphone') ?>
<?php smartphone_header_scripts() ?>

トラックバック - http://asakura.g.hatena.ne.jp/asakura-t/20130116

2011-07-07(Thu)

久々に妙なバグに当たる

| 久々に妙なバグに当たる - 浅倉卓司@blog風味? を含むブックマーク 久々に妙なバグに当たる - 浅倉卓司@blog風味? のブックマークコメント

 たぶんOpenPNEsymfony(かdoctrine)のバグじゃないかと思うのだけれど。

 下記のようなコードで、count()の値が上と下で違っていた:

<?php $_member = $sf_user->getMember() ?>
<?php $_images = $_member->getMemberImage() ?>
<?php echo $_images->count() // ここでは 2 ?>
<?php foreach ($_images as $_image): ?>
 $_imageの表示とか色々
<?php endforeach ?>
<?php echo $_images->count() // ここでは 3 ?>

 ちなみに、$_images->count()をcount($_images)にしても結果は変わらず。


 どっかのバージョンで直ってたりするのかなぁ。。。

トラックバック - http://asakura.g.hatena.ne.jp/asakura-t/20110707

2009-03-18(Wed)

文字コード変換のBehaviorPluginにしようと思ったら、

| 19:03 |  文字コード変換のBehaviorPluginにしようと思ったら、 - 浅倉卓司@blog風味? を含むブックマーク  文字コード変換のBehaviorPluginにしようと思ったら、 - 浅倉卓司@blog風味? のブックマークコメント

 Symfony/Propelで文字コードの変換をするならBehaviorPluginにしたほうがいいかなと思って作っていたら、hydrate()とbuildCriteria()にはhookがないのね……。

 それでもMixinするならBehavior準拠にしておいたほうがよさげだけど。


lib/ConvertEncodingBehavior.php

<?php

class ConvertEncodingBehavior
{
  private static $disable = FALSE;
  function disable()
  {
    self::$disable = TRUE;
  }
  function enable()
  {
    self::$disable = FALSE;
  }

  const CONFIG_NAME = 'propel_behavior_convert_encoding_';
  static $default_inner_encoding = 'utf8';
  static $default_db_encoding = 'eucjp-win';
  private function getParams($obj)
  {
    $class = get_class($obj);

    $columns = sfConfig::get(self::CONFIG_NAME.$class.'_columns', NULL);
    if (is_null($columns)) return;
    if (! is_array($columns)) $columns = array($columns);

    $innerEncoding = sfConfig::get(self::CONFIG_NAME.$class.'_innerEncoding', self::$default_inner_encoding);
    $dbEncoding = sfConfig::get(self::CONFIG_NAME.$class.'_dbEncoding', self::$default_db_encoding);

    return array($columns, $innerEncoding, $dbEncoding);
  }

  public function postHydrate($obj)
  {
    if (self::$disable) return;

    list($columns, $innerEncoding, $dbEncoding) = self::getParams($obj);
    $peerClass = get_class($obj->getPeer());

    foreach ($columns as $column)
    {
      $phpname = call_user_func(array($peerClass, 'translateFieldName'), $column, BasePeer::TYPE_FIELDNAME, BasePeer::TYPE_PHPNAME);
      $set = 'set'.$phpname;
      $get = 'get'.$phpname;
      $obj->$set( mb_convert_encoding($obj->$get(), $innerEncoding, $dbEncoding) );
    }
  }

  public function postBuildCriteria($obj, $criteria)
  {
    if (self::$disable) return;

    list($columns, $innerEncoding, $dbEncoding) = self::getParams($obj);
    $peerClass = get_class($obj->getPeer());

    foreach ($columns as $column)
    {
      $const = call_user_func(array($peerClass, 'translateFieldName'), $column, BasePeer::TYPE_FIELDNAME, BasePeer::TYPE_COLNAME);

      if (! $obj->isColumnModified($const)) continue;

      $get = 'get'. call_user_func(array($peerClass, 'translateFieldName'), $column, BasePeer::TYPE_FIELDNAME, BasePeer::TYPE_PHPNAME);
      $criteria->add($const, mb_convert_encoding($obj->$get(), $dbEncoding, $innerEncoding));
    }

    return $criteria;
  }

}

config/config.php

<?php

sfPropelBehavior::registerHooks('convert_encoding', array(
  ':hydrate:post'       => array('ConvertEncodingBehavior', 'postHydrate'),
  ':buildCriteria:post' => array('ConvertEncodingBehavior', 'postBuildCriteria'),
));

model/TargetModel.php

<?php

class TargetModel extends BaseTargetModel
{
  public function hydrate()
  {
    $args = func_get_args();
/*
    foreach (sfMixer::getCallables('BaseTargetModel:hydrate:pre') as $callable)
    {
      $new_args = $args;
      array_unshift($new_args, $this);
      $ret = call_user_func_array($callable, $new_args);
      if ($ret) return $ret;
    }
*/
    $res = call_user_func_array( array('parent', 'hydrate'), $args );

    foreach (sfMixer::getCallables('BaseTargetModel:hydrate:post') as $callable)
    {
      $ret = call_user_func($callable, $this);
      if ($ret) return $ret;
    }

    return $res;
  }

  public function buildCriteria()
  {
/*
    foreach (sfMixer::getCallables('BaseTargetModel:buildCriteria:pre') as $callable)
    {
      $ret = call_user_func($callable, $this);
      if ($ret) return $ret;
    }
*/
    $criteria = parent::buildCriteria();

    foreach (sfMixer::getCallables('BaseTargetModel:buildCriteria:post') as $callable)
    {
      $ret = call_user_func($callable, $this, $criteria);
      if ($ret) return $ret;
    }

    return $criteria;
  }

}

sfPropelBehavior::add('TargetModel', array(
  'convert_encoding' => array(
    'columns'       => array('col1', 'col2', 'col3',),
    'innerEncoding' => 'utf8',
    'dbEncoding'    => 'eucjp-win',
  ),
));
トラックバック - http://asakura.g.hatena.ne.jp/asakura-t/20090318
2004 | 01 | 02 | 03 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2005 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2006 | 01 | 02 | 03 | 04 | 05 | 06 | 08 | 09 | 10 | 11 | 12 |
2007 | 02 | 03 | 04 | 05 | 06 | 07 | 10 | 11 | 12 |
2008 | 02 | 03 | 04 | 06 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2012 | 02 | 03 | 04 | 05 | 07 | 08 | 10 | 11 | 12 |
2013 | 01 | 05 | 07 |
2014 | 01 | 02 |
2016 | 01 |
2017 | 01 | 05 |
Error : RSSが取得できませんでした。