[Mautic 2.16.2] 漢字がピンインに、ひらがなカタカナがローマ字に変換されるのをどうにかしたい

Mauticのコンタクトでトラッキングしたユーザーのイベントに表示されるページタイトルが漢字はピンインに、ひらがなカタカナはローマ字に変換されるという謎の仕様があります。

「o weni hewase (ru lipeji)」や「o weni hewase (que renpeji)」は本来はそれぞれ「お問い合わせ(入力ページ)」、「お問い合わせ(確認ページ)」というページタイトルで、「お」→「o」とひらがながローマ字に、「問」→「wen」のように漢字がピンインに変換されてしまい、全く読めない謎の言語が誕生してしまうので、これをどうにかしたい。

ファイルの場所 /app/bundles/PageBundle/Model/PageModel.php
[php]
// 616行目
$safeTitle = InputHelper::transliterate($query[‘page_title’]);

$safeTitle = $query[‘page_title’];
[/php]

本来は便利な機能なはずなのですが、「InputHelper::transliterate」が悪さをしているので、使用しないように変更しました。

[Mautic 2.16.2] 日本語化しても日本向けにならない部分を直そう

オープンソースのMAツール、Mauticを使い始めたところ、一応日本語対応しているのですが細かい部分でちらほら日本の環境に最適化されていないなと思った部分がいくつかあったので、直しました。

姓名が逆順で表示される

デフォルトだと「名, 姓」の順で表示されてしまうので、これを「姓 名」の表示に変えたい。
こういうのは管理画面で設定できると本当に便利なのになぁと思ったり。
主に姓名逆順で困るのが、以下。

  • コンタクト(リード)のリスト
  • 送信メールの名前

コンタクト(リード)のリスト

ファイルの場所 /app/bundles/LeadBundle/Controller/LeadController.php
[php]
// 1308行目
$leadName = $leadFields[‘firstname’].’ ‘.$leadFields[‘lastname’];

$leadName = $leadFields[‘lastname’].’ ‘.$leadFields[‘firstname’];
[/php]

ファイルの場所 /app/bundles/LeadBundle/Controller/LeadController.php
[php]
// 1308行目
$leadName = $leadFields[‘firstname’].’ ‘.$leadFields[‘lastname’];

$leadName = $leadFields[‘lastname’].’ ‘.$leadFields[‘firstname’];

// 1835行目
$items[$user[‘id’]] = $user[‘firstName’].’ ‘.$user[‘lastName’];

$items[$user[‘id’]] = $user[‘lastName’].’ ‘.$user[‘firstName’];
[/php]

ファイルの場所 /app/bundles/LeadBundle/Entity/Lead.php
[php]
// 710行目
public function getName($lastFirst = false) //この$lastFirstのtrue/falseで判定している

public function getName($lastFirst = true)

// 717行目
$fullName = $lastName.’, ‘.$firstName;

$fullName = $lastName.’ ‘.$firstName; // カンマが不要なので削除

// 754行目
public function getPrimaryIdentifier($lastFirst = false)

public function getPrimaryIdentifier($lastFirst = true)
[/php]

送信メールの名前

[php]
//*ファイルの場所 /app/bundles/EmailBundle/Model/EmailModel.php
// 1622行目
if (!$mailer->setTo($user[‘email’], $user[‘firstname’].’ ‘.$user[‘lastname’])) {

if (!$mailer->setTo($user[‘email’], $user[‘lastname’].’ ‘.$user[‘firstname’])) {

// 2404行目
if (!$mailer->setTo($user[‘email’], $user[‘firstname’].’ ‘.$user[‘lastname’])) {

if (!$mailer->setTo($user[‘email’], $user[‘lastname’].’ ‘.$user[‘firstname’])) {
[/php]

コンタクトの詳細で住所の順番が海外式

住所の表記も逆に表示されてしまうので、これを解消したい。
[php]
//*ファイルの場所 /app/bundles/LeadBundle/Views/Lead/lead.html.php
// 511行目から


escape($fields[‘core’][‘address1’][‘value’]); ?>

escape($fields[‘core’][‘address2’][‘value’]).’
‘ : ”; ?>
escape($lead->getLocation()); ?>
escape($fields[‘core’][‘zipcode’][‘value’]) : ” ?>

escape($fields[‘core’][‘zipcode’][‘value’]) : ” ?>

escape($lead->getLocation()); ?>

escape($fields[‘core’][‘address1’][‘value’]); ?>

escape($fields[‘core’][‘address2’][‘value’]) : ”; ?>

[/php]

[scss]毎回面倒な吹き出しをmixin化

なんでもっと早くやらなかったのか不思議で仕方ない。
毎回普通にcss書いてたので、流石にめんどくさくてmixin作りました。
単色の吹き出しに使えます。

[css]
// mixin
@mixin balloon-arrow($direction, $duration, $color) {
position: absolute;
content: “”;
display: block;
width: 0;
height: 0;
border-style: solid;
@if $direction == top {
top: -$duration;
left: 50%;
margin-left: -$duration;
border-width: 0 $duration $duration $duration;
border-color: transparent transparent $color transparent;
}
@if $direction == right {
right: -$duration;
top: 50%;
margin-top: -$duration;
border-width: $duration 0 $duration $duration;
border-color: transparent transparent transparent $color;
}
@if $direction == bottom {
bottom: -$duration;
left: 50%;
margin-left: -$duration;
border-width: $duration $duration 0 $duration;
border-color: $color transparent transparent transparent;
}
@if $direction == left {
left: -$duration;
top: 50%;
margin-top: -$duration;
border-width: $duration $duration $duration 0 ;
border-color: transparent $color transparent transparent;
}
}
[/css]
引数はそれぞれ
$direction 吹き出しの方向、top, right, bottom, leftで指定 bottomだったらボックスの下にくっつく
$duration 吹き出しの大きさ pxで指定
$color 吹き出しの色 hexでもrgbでもrgbaでもok

[css]
// scss
.balloon {
background: #000;
border-radius: 20px;
position: relative;

&:after {
@include balloon-arrow(bottom, 20px, #000);
}
}
[/css]

[Concrete5] オプションリスト属性で複数の値を設定したときのタグ付け[メモ]

属性の値はページテンプレートでそのまま取得しようとすると以下のような書き方になるのですが、
[php]
// ページテンプレートの場合
getAttribute(‘option_list’);?>
[/php]

オプションリストで複数の値が設定されている場合、すべて生のテキストが出力されてしまってデザインが実現できません。

[html]
オプション1 オプション2 オプション3
[/html]

foreachで回せばタグ付けできます。

[php]

    getAttribute(‘option_list’);
    foreach($option as $op) {?>

[/php]

[html]

  • オプション1
  • オプション2
  • オプション3
    • [/html]

[Concrete5] サイト属性の取得 [メモ]

Concrete5のバージョン8からサイトに属性がつけられるようになったので、使ってみました。

[参照元]
サイト属性値を取得する concrete5 Japan 日本語公式サイト

/dashboard/system/basics/attributes で属性を作って、
/dashboard/system/basics/name に属性値を入力して、
テーマに
[php]
getSite()->getAttribute(‘属性のキー’); ?>
[/php]
を書くだけ!簡単!すごい!!

なぜか「<?=」が、「<?php 」だと動かなかったのですが、その辺は詳しくないのでよくわからないです。

[EC-CUBE3] 商品総数を表示したかった。[メモ]

EC-CUBE2時代はテンプレートにサクッとphpを書けば表示できてたものが、EC-CUBE3になってsymfonyベースになったせいで非常にデザイナー泣かせのシステムになってしまいました。

何が辛いって、「変数一つ表示するのにそんなに手間をかけないといけないの?」ってレベルの話で、データベースの値を変更しないとそもそもcontrollerが動かないという正直なところ、symfonyはもう二度と触りたくないと思いました。
全然仕組みがわからないので、かれこれ数十時間を無駄に費やしたと思います。
本も数冊買ったけど全然やくに立たなかった。

愚痴っても仕方ないので、登録されている商品の総商品点数の表示の仕方をメモしておきます。

1. ブロックを作る

全ページのヘッダーに商品数を表示したかったので、全ページに表示するための、ブロックを管理画面から作成します。
(既存のブロックに追加する場合は、ここは飛ばしてok)
スクリーンショット 2018-04-10 19.34.40

2. ページレイアウトにブロックを追加

レイアウト管理で、作成したブロックをページレイアウトに追加します。
スクリーンショット 2018-04-10 19.35.42

3. [重要]DBでdtb_blockのlogic_flgを1にする

これをしないと、上に書いたように、そもそもControllerが動かないという謎の仕様。
管理画面のブロック追加のページに書いといてほしいと思いました。
スクリーンショット 2018-04-10 19.39.22

4. Controllerを作る

/src/Eccube/Controller/Block/に、任意の名前のファイルを作ります。
ProductCountController.phpとかでいいと思います。

中身は、以下。
[php]
findAll();
$num = count($products);

return $app->render(‘Block/product_count.twig’, array(
‘count’ => $num,
));
}
}
[/php]
これはもうどうしようもなくてフォーラムに質問したら教えてくれました。
やはり本読んだりググるより、直接知ってる人に聞くのが一番だと思いました。

5. ControllerProviderに追記をする

/src/Eccube/ControllerProvider/FrontControllerProvider.php
の、
75行目付近にブロック関連のプロバイダーが書いてあるので、そこに追記します。

[php]
$c->match(‘/block/product_count’, ‘\Eccube\Controller\Block\ProductCountController::index’)->bind(‘block_product_count’);
[/php]

6. ブロックに変数を記述

ここで、ようやくビューに変数を書きます。
[html]

商品点数
{{ count }}

[/html]

以上です。

EC-CUBE2だったら、/data/Smarty/templates/default/header.tpl に以下を書くだけだったのに、本当めんどくさくなりましたね。
[html]

$objQuery = new SC_Query();
$table = ‘dtb_products’;
$where = ‘del_flg = 0 AND status = 1’;
$count = $objQuery->count($table, $where);
echo $count;

[/html]

[Concrete5 v8]上級権限モードで権限を設定する時につまづく私のための備忘録[メモ]

Concrete5で、上級権限モードにすると承認フローや、アカウント別の管理画面へのアクセス処理など、非常に細かく設定ができます。
が、制作上権限の設定を忘れて、ファイルマネージャーへ管理者アカウント以外でアクセスできなくなってしまったり、新規ページコンポーザーでアクセス拒否のエラーが出たりして、あれ、どこで設定するんだっけ?的なことがちらほらあります。
上級権限モードにした時に設定を忘れないように、備忘録をつけておきます。

上級権限モードとは

上級権限モードにすると

  • ページの閲覧・編集・編集の承認(公開)・管理(移動やコピー)・削除
  • ページの公開日時と公開終了日時の指定
  • エリアの閲覧・編集・編集の承認(公開)・管理(移動やコピー)・削除
  • エリアに追加出来るブロックの制限
  • ブロックの閲覧・編集・削除
  • 作成できる子ベージのページタイプの限定
  • グループへの期間限定加入

をユーザーやグループ毎に行えるようになります。
Concrete5日本語公式サイトより

権限の設定箇所が結構とっ散らかっている印象があって、ついうっかり設定を忘れてしまうことが多いです。

設定する箇所について

権限グループを作って、ユーザーごとに権限グループを割り当てる方法をとっています。
デフォルトでは、スーパーユーザー(インストール時のアカウント)はグループに属していないため、制作中はスーパーユーザーを使っていると、承認フロー周りの確認などでつまづくことがあります。
実際ありました。

僕が設定するグループは大体三つで、

  • 管理者:最上位権限
  • 編集者:編集・ページ追加のみ
  • 制作者:最上位権限

になります。
管理者と制作者は基本同じ権限に設定しているのですが、運用時に承認フローで承認メールを飛ばしたりする際に制作側に承認を求められても困るので、
管理者グループのみに承認メールを飛ばすようにするための区分けです。
スーパーユーザーがあるのに制作者グループを作っているのは、チームで制作する際のアカウントのためです。

原則的に、編集者が編集を行ってワークフローに送信してもらって、管理者が承認を行って公開、というイメージです。
そのほかにも編集者にはページを削除する権限を外したり、テンプレートの変更を行えないようにして作業範囲を限定的にすることで意図しないサイトの崩壊を防ぐ目的で制作しています。

なお、僕がいつも設定している箇所は以下の通りです。

ページ権限

場所:/index.php/dashboard/sitemap/full
基本的に、ページの権限は、フルサイトマップでトップページに設定をして、下階層はトップページを継承するようにしています。

また、もっと細かく設定したい場合、例えば、
「NEWS」ページだけを追加編集できる権限グループには、トップページから権限継承せずにNEWSページ以下のみにページ追加の権限を与えるとか、
ページ追加はできないけど、編集だけできる権限グループを作ったりとか、応用するとかなり細かく設定できます。

一般公開したくないページを作る場合は、権限を継承せずに手動で「表示」のゲストを登録ユーザーなどに変更すればいいかと思います。

ページタイプ権限

場所:/index.php/dashboard/pages/types
追加できるページタイプごとに権限を設定できます。
ここの設定をすることで、「ページの追加とサイトの案内」ボタンクリック時の「新しいページ」にページタイプが表示されます。
ここの設定を完全に忘れていて、下位権限グループで「新しいページ」の項目が表示されなくて小一時間悩みました。

スクリーンショット 2018-03-15 17.10.07

Screen Shot 2018-03-15 at 17.18.10-fullpage

スクリーンショット 2018-03-15 17.37.16

ファイルマネージャー権限

場所:/index.php/dashboard/system/files/permissions
ファイルマネージャーにアクセスする権限や、ファイルの操作に関する権限を設定できます
スクリーンショット 2018-03-15 17.22.05

タスク権限

場所:/index.php/dashboard/system/permissions/tasks
各種設定や、操作などの権限を設定できます。
なぜかフルサイトマップのアクセスもここにあったりして、ややこしいです。
僕はフルサイトマップを使用してページの更新をするのが効率がいいと考えているので、編集者グループにもフルサイトマップへのアクセスを許可すべきかと思っています。
スクリーンショット 2018-03-15 17.24.17

ユーザー権限

場所:/index.php/dashboard/system/permissions/tasks
ユーザーの追加や、削除などへのアクセスの権限です。
編集者にユーザーの追加や削除の権限は与えない方針です。
スクリーンショット 2018-03-15 17.26.59

以上です。

[concrete5 サイト制作] 社会福祉法人 恩賜財団 東京都同胞援護会

社会福祉法人 恩賜財団 東京都同胞援護会のサイトを10年ぶりにリニューアルしました
http://doen.jp/

昔MTで作ったせいで更新がすごく大変だったものをconcrete5にしてクライアントの更新作業が楽になるように設計。
もうずっとリニューアルしたかったんですよ

Screen Shot 2017-04-03 at 16.15.24-fullpage

Screen Shot 2017-04-03 at 16.15.39-fullpage

Screen Shot 2017-04-03 at 16.16.09-fullpage

Screen Shot 2017-04-03 at 16.16.03-fullpage

やったこと

  • デザイン
  • HTML/CSS/JSコーディング
  • レスポンシブ
  • concrete5組み込み
  • フォーム作成(concrete5外)
  • 承認フロー
  • 運用マニュアル作成

つらかったこと

  • 同じフォーマットにひたすら住所やら電話番号やら座標やらを入力していく作業
    →xmlかcsvでインポーター使えばよかったと反省。あるいはデータ投稿だけしてもらうバイトを雇えばよかった。
  • 承認フローがなかなかうまく機能してくれなくてどハマり
    →参考文献がなかったのと、フォーラムに質問するということを考えなかったので反省。次からはググってもわからない問題はフォーラムに質問しよう。
  • さくらサーバーで通知メールが飛ばない問題
    →もうどうしようもなくてフォーラムに相談して解決してもらった。

更新性が高い設計にするために汎用性をもたせつつ、デザインを両立させるという作業に対して、非常にモチベーションが高く保てたかな、と。
今回制作ページは160ページほどで、concrete5で作らなかったらおそらく3倍くらいの作業時間が必要だったのではないかなーと思います。

リリースしたおかげで今月は暇になったからゆっくり療養します。もう体がバキバキ。

[concrete5] Ver8.0.3 さくらのレンタルサーバーだとメール通知が送れない問題[解決]

表題の通り、さくらのレンタルサーバーでメール通知が送れない問題が発生して、ログを見てもわからないし、さくらの管理画面にエラーログは出力されないしで、全く原因がわからず1日半くらい費やしてしまってからフォーラムに相談してやっと解決できたのでご紹介します。
フォーラムで教えてくださった方に感謝。

concrete5 JAPAN フォーラム コメント欄のメール通知が送られない

おそらくさくらのレンタルサーバーでのセキュリティで、送信元ドメインが不正だとphp関数からメールが送れない、というのが原因だったのかと思います。

環境は以下

  • さくらレンタルサーバー ビジネス
  • PHP 5.6.30
  • mySQL 5.5
  • concrete5 8.0.3

確認した送れない通知メールは以下

  • コメント欄ブロックの通知
  • メール送信テスト
  • パスワード再発行のメール

なお以下の通知メールは送れていました。

  • ワークフローの通知
  • フォームブロックからの投稿通知

application/config/generated_overrides/concrete.phpに以下を追記して対処しました。
[php]
‘ja_JP’,
‘version_installed’ => ‘8.0.3’,
‘version_db_installed’ => ‘20161216000000’,
‘misc’ => [
‘login_redirect’ => ‘DESKTOP’,
‘access_entity_updated’ => 1488174725,
],
‘cache’ => [
‘blocks’ => false,
‘assets’ => false,
‘theme_css’ => false,
‘overrides’ => false,
‘pages’ => ‘0’,
‘full_page_lifetime’ => ‘default’,
‘full_page_lifetime_value’ => null,
],
‘theme’ => [
‘compress_preprocessor_output’ => false,
‘generate_less_sourcemap’ => false,
],

// さくらレンタルサーバー用メール通知 ここから
‘email’ => array(
‘enabled’ => true,
‘default’ => array(
‘address’ => ‘concrete5-noreply@’ . (isset($_SERVER[‘SERVER_NAME’]) ? $_SERVER[‘SERVER_NAME’] : ‘localhost’),
)
),
// さくらレンタルサーバー用メール通知 ここまで

];

[/php]

MacのFirefoxでimgのhoverにtransitionとopacityを書くとバグる

表題の通りです。
Firefox(バージョン52で確認)で、画像にマウスを乗せた時にフェードでちょっとだけ透明度を上げるような動き、よくあるじゃないですか。

画像に直接transitionとopacityを指定したら、途中までは想定通りフェードで透明になるんですが、最後にopacity:1に戻ってしまうという事象が発生しました。

追記
どうやらwindowsのfirefoxだと想定通りに動くらしいので、macのfirefoxだけの事象のようです。
タイトルを変更させていただきました。
Firefoxでimgのhoverにtransitionとopacityを書くとバグる

MacのFirefoxでimgのhoverにtransitionとopacityを書くとバグる

想定の動き(Chromeでの表示)

Firefoxでの動き(Firefoxでの表示)

ソースコードは以下です。
[html]



[/html]

原因がつかめなくて四苦八苦してしまったのですが、img自体にtransitionとopacityを付与するのではなく、imgの親にtransitionとopacityを付与することで解決しました。

[html]



[/html]