Skip to content

Manage content on page that depends on URL query or Geo data.

License

Notifications You must be signed in to change notification settings

acid23m/yii2-multipage

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Multi-Page

Manage content on page that depends on URL query or Geo data.

Installation

The preferred way to install this extension is through composer.

Either run

php composer.phar require --prefer-dist acid23m/yii2-multipage "~2.0"

or add

"acid23m/yii2-multipage": "~2.0"

to the require section of your composer.json file.

Usage

Once the extension is installed, do next:

Add module in backend/config/main.php.

'module' => [
    \multipage\Module::DEFAULT_ID => [
        'class' => \multipage\Module::class,
        'layout' => '@backend/views/layouts/main.php'
    ]
]

Add menu links somewhere in admin panel to:

  • multipage/marker/index - list of markers

  • multipage/marker/create - create new marker

  • multipage/parameter/index - list of get-parameters

  • multipage/parameter/create - create new get-parameter

Register markers and rules in admin panel.

Replace markers in content for site front. There are three ways:

  • Globally (not recommended). Search markers in every response.
'components' => [
    'response' => [
        'on beforeSend' => function ($event) {
            /** @var \yii\web\Response $response */
            $response = $event->sender;
            if ($response->data !== null) {
                $response->data = \multipage\models\Process::replaceMarkers($response->data);
            }
        }
    ],
]
  • As behavior for ActiveRecord.
namespace frontend\models;

use common\models\post\PostRecord;
use multipage\behaviors\ReplaceMarkersBehavior;
use yii\helpers\ArrayHelper;

/**
 * Class Post.
 *
 * @package frontend\models
 */
final class Post extends PostRecord
{
    /**
     * {@inheritdoc}
     */
    public function behaviors(): array
    {
        $behaviors = [
            'replaceMarkers' => [
                'class' => ReplaceMarkersBehavior::class,
                'attribute' => 'description'
                //'attribute' => ['preview', 'description', 'text']
            ]
        ];

        return ArrayHelper::merge(parent::behaviors(), $behaviors);
    }

}
  • Replace manually.
namespace frontend\controllers;

use frontend\models\Post;
use yii\web\Controller;

/**
 * Site controller
 */
final class SiteController extends Controller
{
    /**
     * Displays post.
     * @return string
     */
    public function actionView($slug): string
    {
        $post = Post::find()
            ->select(['id', 'title', 'date', 'description'])
            ->show($slug)
            ->one();

        $post->description = \multipage\models\Process::replaceMarkers($post->description);

        return $this->render('view', compact('post'));
    }
}

Markers

Markers - placeholders in the text that must be replaced. Markers has name and default text.

  • name is special code, e.g. {{placeholder}}.

  • default text - {{placeholder}} will be replaced by default text if no rule matches.

Rules

Markers are replaced by certain rules. Replacement rules consists of:

  • marker, e.g. {{marker_str}}.

  • language, e.g. "en" or "de" or "ru".

  • source type, on the basis of what to do a replacement.

  • replacement. Markers will be replaced to this text if rule matches. It can be HTML content.

Source types can be:

url parameters:

  • get-parameter, e.g. utm_content.

  • rule operator - equally or contains. The value of the get-parameter can exactly or partially coincide.

  • parameter value.

country:

  • country name, e.g. "Germany".

region:

  • region name, e.g. "Land Hessen". Search query in select box is case sensitive.

city:

  • city name, e.g. "Saint Petersburg". Search query in select box is case sensitive.

Examples

marker name = {{discount-1}}
default value = '' (empty string)
query parameter = utm_source
operator = equally
value = email
replacement = Congrats! You have personal 10% discount!
---
query parameter = utm_source
operator = equally
value = facebook
replacement = Congrats! You have personal 5% discount!
text on page = Just call Us to order this Item. {{discount-1}}

So for url https://shop.com/item/123 filtered text on the front page will be

Just call Us to order this Item.

For url https://shop.com/item/123?utm_source=email filtered text on the front page will be

Just call Us to order this Item. Congrats! You have personal 10% discount!

And finally for url https://shop.com/item/123?utm_source=facebook filtered text on the front page will be

Just call Us to order this Item. Congrats! You have personal 5% discount!

GeoIp component

You can use component to get geo data by user ip address.

// current IP
\Yii::$app->get(\multipage\Module::GEOIP_COMPONENT_ID)->getIpData();

or

\Yii::$app->get('geoip')->getIpData('8.8.0.0');

Grid wit locations can be found here:

  • multipage/country/index - list of countries.

  • multipage/region/index - list of regions.

  • multipage/city/index - list of cities.

About

Manage content on page that depends on URL query or Geo data.

Resources

License

Stars

Watchers

Forks

Packages

No packages published