Владимир

Владимир

С нами с 28 декабря 2012; Место в рейтинге пользователей: #53
Илья Уткин
11 октября 2016, 15:08
2
+3
У меня есть вот такой файлик, который позволяет большие числа переводить в 60-ричную систему для сокращения количества символов:

<?php
class SixtyCoder {
    public $table = '0123456789abcdefghijkmnopqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXYZ';
    
    public function to60($number = 0) {
        $number = (int) $number;
        $output = '';
        return $this->divide($number);
    }
    
    public function from60($letters = '0') {
        $length = strlen($letters);
        $number = 0;
        for ($i = 0; $i < $length; $i++) {
            $pos = strpos($this->table, $letters[$i]);
            if ($pos === false) {
                return 0;
            }
            $pow = $length - ($i+1);
            $number = $number + $pos * pow (60, $pow);
        }
        return $number;
    }
    
    public function divide($number = 0, $letters = '') {
        if ($number < 60) {
            $letters = $this->getLetter($number) . $letters;
        } else {
            $rest = $number % 60;
            $letters = $this->getLetter($rest) . $letters;
            $number = ($number - $rest) / 60;
            $letters = $this->divide($number, $letters);
        }
        return $letters;
    }
    
    public function getLetter($number) {
        return substr($this->table, $number, 1);
    }
}

$coder = new SixtyCoder();
$time = time();
echo 'Long: ' . $time;
$short = $coder->to60($time);
echo '
Short: ' . $short;
echo '
Long from short: ' . $coder->from60($short);
Сергей Шлоков
01 октября 2016, 10:11
1
+2
Как-то так
[[!pdoUsers?
    &tpl=`@INLINE <p>[[+username]] - [[+views]].</p>`
    &loadModels=`sitestatistics`
    &innerJoin=`{
        "UserStat":{"class":"UserStatistics","on":"modUser.id=UserStat.uid"},
        "PageStat":{"class":"PageStatistics","on":"UserStat.user_key=PageStat.user_key"}
    }`
     &select=`{
        "PageStat": "IFNULL(SUM(PageStat.views),0) as views"
    }`
    &groupby=`UserStat.uid`
    &where=`["UserStat.uid = 1 AND PageStat.date BETWEEN '2016-01-01' and '2016-06-31' "]`
]]
В параметре where указывается id пользователя и период.
Василий Наумкин
29 сентября 2016, 08:30
1
+1
Просто форма с одним email, без пароля — вот так:
<form action="" method="post">
    <input type="hidden" name="action" value="auth/formLogin"/>
    <h4>Вход</h4>
    <div class="form-group">
        <input type="email" name="email" placeholder="email">
    </div>
    <button class="btn btn-success">Отправить</button>
</form>
Павел Романов
27 сентября 2016, 16:41
2
+1
Поправочка (всё-таки ошибся))):

{var $av = $_pls['tv.aviable']}
{if $av == 0}
	Нет в наличии
{else}
	{if $av > 1 && $av < 10}
		<i class="fa fa-circle"></i>
	{else}
		{if $av >= 10 && $av < 30}
			<i class="fa fa-circle"></i> <i class="fa fa-circle"></i>
		{else}
			{if $av >= 30}
				<i class="fa fa-circle"></i> <i class="fa fa-circle"></i> <i class="fa fa-circle"></i>
			{/if}
		{/if}
	{/if}
{/if}
Сергей Шлоков
23 сентября 2016, 13:25
1
+1
Не так. Любые плейсхолдеры откладываются. По-умолчанию парсер делает 10 циклов. На первом цикле не нашел, отложил на второй цикл и т.д. А вот с фильтрами ситуация другая. Парсер на первом же цикле проверит его и вернет соответствующее значение из then или else. Вот почему в данном топике не работало. Так как на втором цикле этого плейсхолдера уже нет, вместо него значение «false».
П.С. А кэшированные плейсхолдеры сработают только первый раз.
Павел Гвоздь
19 сентября 2016, 21:49
1
+4
{$_modx->runSnippet('!pdoResources', [
    'parents' => $_modx->config.cities,
    'sortby' => 'menuindex',
    'sortdir' => 'ASC',
    'limit' => 0,
    'tpl' => '@INLINE <option {($id == ' ~ $from ~ ') ? \'selected="selected"\' : \'\'} value="{$id}">{$pagetitle}</option>',
])}
Николай
16 сентября 2016, 14:07
1
0
Вот шаблон, которым я всегда пользуюсь. В первой строке количество dirname должно соответствовать вложенности файла.

require dirname(dirname(dirname(__FILE__)))."/config.core.php";

if(!defined('MODX_CORE_PATH')) require_once '../../../config.core.php';
require_once MODX_CORE_PATH.'config/'.MODX_CONFIG_KEY.'.inc.php';
require_once MODX_CORE_PATH.'model/modx/modx.class.php';
$modx = new modX();

$modx->initialize('web');
Далее можно писать код как в любом сниппете.
Василий Наумкин
14 сентября 2016, 08:24
2
+2
При обычном вызове в where передаётся массив, закодированный в JSON. При вызове через Fenom кодировать его нет нужды:
{$_modx->runSnippet('!pdoResources', [
    'parents' => 0,
    'includeTVs' => 'test',
    'where' => ["1 = 1 AND FIND_IN_SET("~$_modx->resource.id~", replace(test, '||', ','))"],
    'showLog' => 1
])}
Василий Наумкин
13 сентября 2016, 18:51
2
+2
Более оптимальный код для добавления опции товара в поисковый индекс:
<?php
switch ($modx->event->name) {
    case 'mse2OnBeforeSearchIndex':
        $key = 'tags'; // имя опции товара
        
        $mSearch2->fields[$key] = 1;
        $q = $modx->newQuery('msProductOption', array(
            'product_id' => $resource->id,
            'key' => $key,
        ));
        $q->select('value');
        if ($q->prepare() && $q->stmt->execute()) {
            $value = $q->stmt->fetchAll(PDO::FETCH_COLUMN);
            if (!empty($value[0])) {
                $resource->set($key, $value);
            }
        }
    break;
}
zooks
02 сентября 2016, 11:03
1
+1
Вот микроразметка под устаревшую data-vocabulary.org, которую использует Яндекс.
[[pdoCrumbs?
&showHome=`1`
&showAtHome=`0`
&tpl=`@INLINE <li class="B_crumb" itemscope="itemscope" itemtype="http://data-vocabulary.org/Breadcrumb"><a class="B_crumb" itemprop="url" href="[[+link]]"><span itemprop="title">[[+menutitle]]</span></a></li>`
&tplCurrent=`@INLINE <li class="B_crumb active" itemscope="itemscope" itemtype="http://data-vocabulary.org/Breadcrumb"><span class="B_currentCrumb" itemscope="itemscope" itemtype="http://data-vocabulary.org/Breadcrumb">[[+menutitle]]</span></li>`
&tplMax=`@INLINE <li class="B_hideCrumb" itemscope="itemscope" itemtype="http://data-vocabulary.org/Breadcrumb">[[+menutitle]]</li>`
&tplHome=`@INLINE <li class="B_firstCrumb" itemscope="itemscope" itemtype="http://data-vocabulary.org/Breadcrumb"><a class="B_homeCrumb" itemprop="url" rel="Home" href="[[++site_url]]"><span itemprop="title">[[++site_name]]</span></a></li>`
&tplWrapper=`@INLINE <ol class="B_crumbBox">[[+output]]</ol>`
]]