AreaWidget.php 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. <?php
  2. namespace common\modules\area\widgets;
  3. use common\modules\area\models\Area;
  4. use yii\base\InvalidConfigException;
  5. use yii\base\Widget;
  6. use yii\helpers\Html;
  7. class AreaWidget extends Widget
  8. {
  9. public $slug;
  10. public $headerClass ="";
  11. public $bodyClass ="";
  12. public $blockClass = "";
  13. public function init()
  14. {
  15. parent::init();
  16. if (empty($this->slug)) {
  17. throw new InvalidConfigException("slug不能为空");
  18. }
  19. $this->blockClass = $this->blockClass ." block";
  20. $this->headerClass = $this->headerClass . " block-header";
  21. $this->bodyClass = $this->bodyClass ." block-body";
  22. }
  23. public function run()
  24. {
  25. $model = Area::findByIdOrSlug($this->slug);
  26. if ($model == null) {
  27. return '';
  28. }
  29. $blocks = $model->getBlocks();
  30. $result = "";
  31. foreach ($blocks as $block) {
  32. $widget = $block["widget"];
  33. $header = Html::tag("h5", $block->title, ['class' => 'panel-title']);
  34. $content = Html::tag("div", $header, [
  35. "class" => $this->headerClass
  36. ]);
  37. $body = $widget::widget([
  38. "model" => $block
  39. ]);
  40. $content .= Html::tag("div", $body, [
  41. "class" => $this->bodyClass
  42. ]);
  43. $result .= Html::tag("div", $content, [
  44. "class" => $this->blockClass
  45. ]);
  46. }
  47. return $result;
  48. }
  49. }