first commit
This commit is contained in:
commit
30c7844d96
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
vendor
|
||||||
|
.idea
|
16
README.md
Normal file
16
README.md
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
<b>Интеграция пакета <a href='https://cg-select.itguild.info/'>cg-select</a> для PHP</b>
|
||||||
|
|
||||||
|
**<a href='https://cg-select.itguild.info/docs/index.html'>Ссылка на документацию</a>**
|
||||||
|
|
||||||
|
**<a href='https://www.npmjs.com/package/cg-select'>Пакет на npmjs</a>**
|
||||||
|
|
||||||
|
Установка:
|
||||||
|
```
|
||||||
|
composer require itguild/php-cg-select
|
||||||
|
```
|
||||||
|
|
||||||
|
Для запуска примера:<br>
|
||||||
|
```
|
||||||
|
php -S localhost:8088 -t=examples
|
||||||
|
```
|
||||||
|
Пример будет доступен по ссылке http://localhost:8088
|
19
composer.json
Normal file
19
composer.json
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
{
|
||||||
|
"name": "itguild/php-cg-select-v2",
|
||||||
|
"description": "Wrapper for CG-Select",
|
||||||
|
"type": "library",
|
||||||
|
"license": "ISC",
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Itguild\\PhpCgSelectV2\\": "src/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Kavalar",
|
||||||
|
"email": "apuc06@mail.ru"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"minimum-stability": "stable",
|
||||||
|
"require": {}
|
||||||
|
}
|
48
examples/category.php
Normal file
48
examples/category.php
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
<?php
|
||||||
|
require_once '../vendor/autoload.php';
|
||||||
|
|
||||||
|
$widget = new \Itguild\PhpCgSelect\CGSelect(".cg-dropdown_selector", [
|
||||||
|
'placeholder' => 'Choose a car',
|
||||||
|
'label' => 'Example',
|
||||||
|
'searchMode' => true,
|
||||||
|
'items' => [
|
||||||
|
[
|
||||||
|
'category' => 'Russia',
|
||||||
|
'categoryItems' => [
|
||||||
|
['id' => 1, 'title' => 'Москва', 'value' => 1],
|
||||||
|
'Саратов',
|
||||||
|
'Волгоград',
|
||||||
|
'Донецк',
|
||||||
|
]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'category' => 'USA',
|
||||||
|
'categoryItems' => [
|
||||||
|
'Alabama',
|
||||||
|
'Texas',
|
||||||
|
'Los-Angeles',
|
||||||
|
]
|
||||||
|
],
|
||||||
|
]
|
||||||
|
])
|
||||||
|
|
||||||
|
?>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>PHP CG-Select Category Example</title>
|
||||||
|
<?php \Itguild\PhpCgSelect\CGSelect::renderCDN(); ?>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<form action="">
|
||||||
|
<button class="cg-dropdown_selector"></button>
|
||||||
|
<button type="submit">Оправить</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
<?php echo $widget->getJS() ?>
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
43
examples/index.php
Normal file
43
examples/index.php
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
<?php
|
||||||
|
require_once '../vendor/autoload.php';
|
||||||
|
|
||||||
|
$widget = new \Itguild\PhpCgSelect\CGSelect(".cg-dropdown_selector", [
|
||||||
|
'placeholder' => 'Choose a car',
|
||||||
|
'label' => 'Example',
|
||||||
|
'name' => 'some',
|
||||||
|
'items' => [
|
||||||
|
'BMW',
|
||||||
|
[
|
||||||
|
'id' => 1,
|
||||||
|
'title' => 'Opel',
|
||||||
|
'value' => 23,
|
||||||
|
],
|
||||||
|
'Lada'
|
||||||
|
],
|
||||||
|
'styles' => [
|
||||||
|
'head' => [
|
||||||
|
'width' => '500px',
|
||||||
|
]
|
||||||
|
],
|
||||||
|
])
|
||||||
|
|
||||||
|
?>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>PHP CG-Select Example</title>
|
||||||
|
<?php \Itguild\PhpCgSelect\CGSelect::renderCDN(); ?>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<form action="">
|
||||||
|
<button class="cg-dropdown_selector"></button>
|
||||||
|
<button type="submit">Оправить</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
<?php echo $widget->getJS() ?>
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
23
src/CGSelect.php
Normal file
23
src/CGSelect.php
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Itguild\PhpCgSelect;
|
||||||
|
|
||||||
|
class CGSelect
|
||||||
|
{
|
||||||
|
protected $driver;
|
||||||
|
|
||||||
|
public function __construct(string $selector, array $options = [])
|
||||||
|
{
|
||||||
|
$this->driver = new CGSelectDriver($selector, $options);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getJS(){
|
||||||
|
return $this->driver->getJS();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function renderCDN($version = 'latest')
|
||||||
|
{
|
||||||
|
CGSelectDriver::renderCDN($version);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
182
src/CGSelectDriver.php
Normal file
182
src/CGSelectDriver.php
Normal file
@ -0,0 +1,182 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Itguild\PhpCgSelect;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class CGSelectDriver
|
||||||
|
{
|
||||||
|
public array $initData = [];
|
||||||
|
public string $itemsStr = '';
|
||||||
|
|
||||||
|
public string $stylesStr = '';
|
||||||
|
public string $paramsStr = '';
|
||||||
|
public string $html = '';
|
||||||
|
|
||||||
|
public string $js = '';
|
||||||
|
|
||||||
|
public function __construct(string $selector, array $options = [])
|
||||||
|
{
|
||||||
|
$this->initData['selector'] = $selector;
|
||||||
|
$this->initData = array_merge($this->initData, $options);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function createJS(): void
|
||||||
|
{
|
||||||
|
$this->js .= 'const dropdown = new CGSelect({';
|
||||||
|
$this->js .= $this->getParams();
|
||||||
|
$this->js .= $this->getItems();
|
||||||
|
$this->js .= $this->getStyles();
|
||||||
|
$this->js .= '});';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getJS(): string
|
||||||
|
{
|
||||||
|
$this->createJS();
|
||||||
|
return $this->js;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $version
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public static function renderCDN(string $version = 'latest'): void
|
||||||
|
{
|
||||||
|
echo "<script src='https://cdn.itguild.info/items/cg-select/$version/main.js'></script>";
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getParams(): string
|
||||||
|
{
|
||||||
|
return $this->createParams($this->initData);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param array $data
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
private function createParams(array $data): string
|
||||||
|
{
|
||||||
|
foreach ($data as $key => $datum) {
|
||||||
|
if (is_string($datum)) {
|
||||||
|
$this->paramsStr .= "$key: '$datum',";
|
||||||
|
}
|
||||||
|
if (is_integer($datum)) {
|
||||||
|
$this->paramsStr .= "$key: $datum,";
|
||||||
|
}
|
||||||
|
if (is_bool($datum)) {
|
||||||
|
$this->paramsStr .= "$key: $datum,";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->paramsStr;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param array $data
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
private function createParamsLocal(array $data): string
|
||||||
|
{
|
||||||
|
$paramsStr = '';
|
||||||
|
foreach ($data as $key => $datum) {
|
||||||
|
if (is_string($datum)) {
|
||||||
|
$paramsStr .= "$key: '$datum',";
|
||||||
|
}
|
||||||
|
if (is_integer($datum)) {
|
||||||
|
$paramsStr .= "$key: $datum,";
|
||||||
|
}
|
||||||
|
if (is_bool($datum)) {
|
||||||
|
$paramsStr .= "$key: $datum,";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $paramsStr;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string|bool
|
||||||
|
*/
|
||||||
|
public function getItems(): string|bool
|
||||||
|
{
|
||||||
|
if (isset($this->initData['items'])) {
|
||||||
|
$this->createItems($this->initData['items']);
|
||||||
|
return $this->itemsStr;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param array $data
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
private function createItems(array $data): void
|
||||||
|
{
|
||||||
|
$this->itemsStr .= "items: [";
|
||||||
|
foreach ($data as $datum) {
|
||||||
|
if (is_string($datum)) {
|
||||||
|
$this->itemsStr .= "'$datum',";
|
||||||
|
}
|
||||||
|
if (is_array($datum)) {
|
||||||
|
$this->itemsStr .= "{";
|
||||||
|
if (isset($datum['category']) && isset($datum['categoryItems'])) {
|
||||||
|
$this->itemsStr .= "category: '" . $datum['category'] . "',";
|
||||||
|
$this->itemsStr .= "categoryItems: [";
|
||||||
|
foreach ($datum['categoryItems'] as $item) {
|
||||||
|
if (is_string($item)) {
|
||||||
|
$this->itemsStr .= "'$item',";
|
||||||
|
}
|
||||||
|
if (is_array($item)) {
|
||||||
|
$this->itemsStr .= "{";
|
||||||
|
$this->itemsStr .= $this->createParamsLocal($item);
|
||||||
|
$this->itemsStr .= "},";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$this->itemsStr .= "],";
|
||||||
|
} else {
|
||||||
|
$this->itemsStr .= $this->createParamsLocal($datum);
|
||||||
|
}
|
||||||
|
$this->itemsStr .= "},";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->itemsStr .= "],";
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string|bool
|
||||||
|
*/
|
||||||
|
public function getStyles(): string|bool
|
||||||
|
{
|
||||||
|
if (isset($this->initData['styles'])) {
|
||||||
|
$this->createStyle($this->initData['styles']);
|
||||||
|
return $this->stylesStr;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param array $styles
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function createStyle(array $styles): void
|
||||||
|
{
|
||||||
|
$this->stylesStr .= "styles: {";
|
||||||
|
foreach ($styles as $key => $style) {
|
||||||
|
$this->stylesStr .= "$key: {" . $this->createParamsLocal($style) . "}";
|
||||||
|
}
|
||||||
|
$this->stylesStr .= "},";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user