File tree Expand file tree Collapse file tree 3 files changed +119
-0
lines changed Expand file tree Collapse file tree 3 files changed +119
-0
lines changed Original file line number Diff line number Diff line change 1+ <?php
2+ /**
3+ * @author Dmytro Karpovych
4+ * @copyright 2016 NRE
5+ */
6+ namespace nullref \core \widgets ;
7+
8+ use nullref \core \interfaces \ILanguageManager ;
9+ use Yii ;
10+ use yii \base \Widget ;
11+
12+ class Multilingual extends Widget
13+ {
14+ public $ tab ;
15+ public $ model ;
16+ public $ languages = null ;
17+
18+ /**
19+ * @var MultilingualForm
20+ */
21+ public $ form ;
22+
23+ public function init ()
24+ {
25+ parent ::init ();
26+ if (!count ($ this ->languages )) {
27+ /** @var ILanguageManager $languageManager */
28+ $ languageManager = Yii::$ app ->get ('languageManager ' );
29+ $ this ->languages = $ languageManager ->getLanguages ();
30+ }
31+ }
32+
33+
34+ public function run ()
35+ {
36+ $ this ->view ->registerJs (<<<JS
37+ jQuery('form .nav.nav-tabs').find('a').each(function (index, item) {
38+ var link = jQuery(item);
39+ var errors = jQuery(link.attr('href')).find('.has-error');
40+ if (errors.length) {
41+ link.css('color', '#A94442');
42+ link.html('<i class="fa fa-exclamation-triangle"></i>' + link.text());
43+ }
44+ });
45+ JS
46+ );
47+ $ form = new MultilingualForm ();
48+ ob_get_clean ();
49+ return $ this ->render ('multilingual ' , [
50+ 'form ' => $ form ,
51+ 'tab ' => $ this ->tab ,
52+ 'model ' => $ this ->model ,
53+ 'languages ' => $ this ->languages ,
54+ ]);
55+ }
56+ }
Original file line number Diff line number Diff line change 1+ <?php
2+ /**
3+ * @author Dmytro Karpovych
4+ * @copyright 2016 NRE
5+ */
6+ namespace nullref \core \widgets ;
7+
8+ use yii \widgets \ActiveForm ;
9+
10+ class MultilingualForm extends ActiveForm
11+ {
12+ public $ language ;
13+
14+ public function field ($ model , $ attribute , $ options = [])
15+ {
16+ if ($ this ->language ) {
17+ return parent ::field ($ model , $ attribute . '_ ' . $ this ->language , $ options );
18+ }
19+ return parent ::field ($ model , $ attribute , $ options );
20+ }
21+ }
Original file line number Diff line number Diff line change 1+ <?php
2+ /**
3+ * @var $this \yii\web\View
4+ * @var $form \nullref\core\widgets\MultilingualForm
5+ * @var $model \yii\base\Model
6+ * @var $tab Closure
7+ */
8+ use app \helpers \Languages ;
9+
10+ ?>
11+ <style>
12+ .multilingual-tab-content {
13+ padding: 15px;
14+ margin-bottom: 5px;
15+ border: 1px solid #ddd;
16+ border-top: none;
17+ border-radius: 5px;
18+ border-top-left-radius: 0;
19+ border-top-right-radius: 0;
20+ }
21+ </style>
22+ <div class="multilingual">
23+ <ul class="nav nav-tabs">
24+ <?php $ first = true ;
25+ foreach (Languages::getSlugMap () as $ key => $ lang ): ?>
26+ <li class="<?= ($ first ) ? 'active ' : '' ?> ">
27+ <a data-toggle="tab" href="#<?= $ lang ?> ">
28+ <?= Yii::t ('translation ' , Languages::getMap ()[$ key ]) ?>
29+ </a>
30+ </li>
31+ <?php $ first = false ; endforeach ?>
32+ </ul>
33+ <div class="tab-content multilingual-tab-content" style="padding: 10px 5px">
34+ <?php $ first = true ;
35+ foreach (Languages::getSlugMap () as $ key => $ lang ): ?>
36+ <div id="<?= $ lang ?> " class="tab-pane <?= ($ first ) ? 'active ' : '' ?> ">
37+ <?php $ form ->language = $ lang ?>
38+ <?= call_user_func ($ tab , $ form , $ model ) ?>
39+ </div>
40+ <?php $ first = false ; endforeach ?>
41+ </div>
42+ </div>
You can’t perform that action at this time.
0 commit comments