setup.options.php в последней версии modExtra
Всем привет. Сделал компонент на основе modExtra, но захотелось сделать установку компонентов по checkbox, но в новой версии нет файла setup.options.php и я не совсем понимаю как сделать при установке компонента форму, где можно было бы выбрать чекбоксами нужные компоненты для установки?
Посмотрел в miniShop2 и сделал свой файлик /_build/setup.options.php:
Проект на GitHub
Посмотрел в miniShop2 и сделал свой файлик /_build/setup.options.php:
<?php
$exists = $chunks = false;
$output = null;
/** @var array $options */
switch ($options[xPDOTransport::PACKAGE_ACTION]) {
case xPDOTransport::ACTION_INSTALL:
$exists = $modx->getObject('transport.modTransportPackage', array('package_name' => 'pdoTools'));
if (!empty($options['attributes']['chunks'])) {
$chunks = '<ul id="formCheckboxes" style="height:200px;overflow:auto;">';
foreach ($options['attributes']['chunks'] as $k => $v) {
$chunks .= '
<li>
<label>
<input type="checkbox" name="update_chunks[]" value="' . $k . '"> ' . $k . '
</label>
</li>';
}
$chunks .= '</ul>';
}
break;
case xPDOTransport::ACTION_UPGRADE:
$exists = $modx->getObject('transport.modTransportPackage', array('package_name' => 'pdoTools'));
if (!empty($options['attributes']['chunks'])) {
$chunks = '<ul id="formCheckboxes" style="height:200px;overflow:auto;">';
foreach ($options['attributes']['chunks'] as $k => $v) {
$chunks .= '
<li>
<label>
<input type="checkbox" name="update_chunks[]" value="' . $k . '"> ' . $k . '
</label>
</li>';
}
$chunks .= '</ul>';
}
break;
case xPDOTransport::ACTION_UNINSTALL:
break;
}
$output = '';
if (!$exists) {
switch ($modx->getOption('manager_language')) {
case 'ru':
$output = 'Этот компонент требует <b>pdoTools</b> для быстрой работы сниппетов.
Он будет автоматически скачан и установлен.';
break;
default:
$output = 'This component requires <b>pdoTools</b> for fast work of snippets.
It will be automatically downloaded and installed?';
}
}
if ($chunks) {
if (!$exists) {
$output .= '
';
}
switch ($modx->getOption('manager_language')) {
case 'ru':
$output .= 'Выберите чанки, которые нужно <b>перезаписать</b>:
<small>
<a href="#" onclick="Ext.get(\'formCheckboxes\').select(\'input\').each(function(v) {v.dom.checked = true;});">отметить все</a> |
<a href="#" onclick="Ext.get(\'formCheckboxes\').select(\'input\').each(function(v) {v.dom.checked = false;});">cнять отметки</a>
</small>
';
break;
default:
$output .= 'Select chunks, which need to <b>overwrite</b>:
<small>
<a href="#" onclick="Ext.get(\'formCheckboxes\').select(\'input\').each(function(v) {v.dom.checked = true;});">select all</a> |
<a href="#" onclick="Ext.get(\'formCheckboxes\').select(\'input\').each(function(v) {v.dom.checked = false;});">deselect all</a>
</small>
';
}
$output .= $chunks;
}
return $output;
Списки всех компонентов у меня в файлике /_build/resolvers/setup.php в виде:<?php
/** @var xPDOTransport $transport */
/** @var array $options */
/** @var modX $modx */
if (!$transport->xpdo || !($transport instanceof xPDOTransport)) {
return false;
}
$modx =& $transport->xpdo;
$packages = [
'Ace' => [
'version' => '1.6.5-pl',
'service_url' => 'modstore.pro',
],
'AjaxForm' => [
'version' => '1.1.9-pl',
'service_url' => 'modstore.pro',
],
'ClientConfig' => [
'version' => '2.0.0-pl',
'service_url' => 'modx.com',
],
В файле упаковщике /_build/build.php добавил пару строк:$root = dirname(dirname(__FILE__)) . '/';
$this->builder->setPackageAttributes([
'changelog' => file_get_contents($this->config['core'] . 'docs/changelog.txt'),
'license' => file_get_contents($this->config['core'] . 'docs/license.txt'),
'readme' => file_get_contents($this->config['core'] . 'docs/readme.txt'),
'setup-options' => array(
'source' => $root . '_build/' . 'setup.options.php',
),
]);
но у меня что-то не завелось. Ставяться все подряд без выбора нужных. Может кто-нибудь помочь?Проект на GitHub
Комментарии: 1
Вообщем как оказалось всё работает, осталось сделать чекбоксы с выбором компонентов, которые нужно загружать при установке компонента)
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.