Vladimir

Vladimir

С нами с 25 июня 2021; Место в рейтинге пользователей: #283
Vladimir
16 марта 2022, 09:01
0
похожая но нет, я видел, пробовал и в заметки написал об этом
Vladimir
16 марта 2022, 09:00
0
отображение решил, и забыл про это, hoster.kz это как отдельный вид искусства, всё абсолютно всё через ж, сколько не говорю менеджеру не берите, а кто использует переводите, проблем меньше будет, но конечно меня никто не слушает))
Vladimir
16 марта 2022, 08:52
0
Конечно, я разворачивал на 2 других хостах, таких проблем не было
Vladimir
16 марта 2022, 08:47
0
Пытался так
{$_modx->lexicon('sts_modal_form_title')}
{'sts_modal_form_title' | lexicon}
[[%sts_modal_form_title]]
Тоже самое выводит просто переменную sts_modal_form_title
Vladimir
15 марта 2022, 14:31
0
Из техподдержки вместе с решением выше из заметки
Добрый день.

Поменял значение настройки mbstring.func_overload с 2 на 0 в меню «PHP selector» и элемент начал отображаться.

Обратите внимание что эта настройка распространяется на все сайты хостинга.
Vladimir
07 марта 2022, 12:49
0
Решил заглянуть в настройки fastupload, и сделал так prnt.sc/rdJHQmrb7yh4 и нет проблем, странно что автоматом не проверяется это, типо если установлен плагин translit или нет.
Vladimir
07 марта 2022, 09:43
0
Но что-то мне подсказывает проблема в этом плагине, когда его отключаешь всё работает, пытался установить phpthumb с включенном этим плагином не получилось.
<?php
/**

 * Generate Webp image format
 * 
 * Uses either Imagick or imagewebp to generate webp image
 * 
 * @param string $file Path to image being converted.
 * @param int $compression_quality Quality ranges from 0 (worst quality, smaller file) to 100 (best quality, biggest file).
 * 
 * @return false|string Returns path to generated webp image, otherwise returns false.
 */


if(
	$modx->event->name == 'OnSiteRefresh' ||
	$modx->event->name == 'OnTemplateSave' ||
	$modx->event->name == 'OnChunkSave' ||
	$modx->event->name == 'OnPluginSave' ||
	$modx->event->name == 'OnTemplateVarSave' ||
	$modx->event->name == 'OnDocFormSave' ||
	$modx->event->name == 'OnSnippetSave'
) {
	$options= [xPDO::OPT_CACHE_KEY=>'webp_on_page']; // Clear webp modx cache
	$modx->cacheManager->clean($options);
}

function jcphp01_modx_custom_generate_webp_image($file, $compression_quality = 80)
{
    
    
    $fileWithBasePath = preg_replace("~\/(?!.*\/)(.*)~", '', MODX_BASE_PATH) . $file;
    
    // check if file exists
    if (!file_exists($fileWithBasePath)) {
        return false;
    }

    // If output file already exists return path
    $output_file = $file . '.webp';
    $outputFileWithBasePath = $fileWithBasePath . '.webp';
    
    if (file_exists($outputFileWithBasePath)) {
        return $output_file;
    }
    
    
    $file_type = strtolower(pathinfo($fileWithBasePath, PATHINFO_EXTENSION));

    if (function_exists('imagewebp')) {
        
        switch ($file_type) {
            case 'jpeg':
            case 'jpg':
                $image = imagecreatefromjpeg($fileWithBasePath);
                break;

            case 'png':
                $image = imagecreatefrompng($fileWithBasePath);
                imagepalettetotruecolor($image);
                imagealphablending($image, true);
                imagesavealpha($image, true);
                break;

            case 'gif':
                $image = imagecreatefromgif($fileWithBasePath);
                break;
            default:
                return false;
        }

        // Save the image
        $result = imagewebp($image, $outputFileWithBasePath, $compression_quality);
        if (false === $result) {
            return false;
        }

        // Free up memory
        imagedestroy($image);

        return $output_file;
    } elseif (class_exists('Imagick')) {
        $image = new Imagick();
        $image->readImage($fileWithBasePath);

        if ($file_type === 'png') {
            $image->setImageFormat('webp');
            $image->setImageCompressionQuality($compression_quality);
            $image->setOption('webp:lossless', 'true');
        }

        $image->writeImage($outputFileWithBasePath);
        return $output_file;
    }

    return false;
}





function check_image_file_for_webp_converter_custom($img_real, &$webp_on_page){
	static $uniq_imgs= [];
	

	$img_real= trim($img_real);
	if(in_array($img_real, $uniq_imgs)) return;
	$uniq_imgs[]= $img_real;
	
	$ext= strtolower(pathinfo($img_real, PATHINFO_EXTENSION));
	if(
		$ext == 'jpg' ||
		$ext == 'jpeg' ||
		$ext == 'png' 
	) {
		$abs= jcphp01_modx_custom_generate_webp_image($img_real);
		$abs_base= str_replace('//', '/', MODX_BASE_PATH.$abs);

		if( file_exists($abs_base)){
			$webp_on_page[$img_real]= $abs;
		}
	}
}


try{

    if( // replace jpg and png images to webp
    	$modx->event->name == 'OnWebPagePrerender' && 
    	stripos($_SERVER['HTTP_ACCEPT'], 'image/webp') !== false
    ){
        
    	if($disable_replacing_for_logged_user && $modx->user->hasSessionContext('mgr')) return ''; 
    	
    	$options= [xPDO::OPT_CACHE_KEY=>'webp_on_page'];
    	$cache_key= md5(MODX_SITE_URL.$_SERVER['REQUEST_URI']);
    
    	$cached_webp_on_page= $modx->cacheManager->get($cache_key, $options);
    	$output= &$modx->resource->_output;
    
        
    
    	if( empty($cached_webp_on_page) ){
    		$webp_on_page= [];
    		
    		preg_match_all('/<img[^>]+>/i', $output, $result);
    		
    		if(count($result)){ // Search images in img tag
    			foreach($result[0] as $img_tag)	{
    				$img_tag= str_replace("'", '"', $img_tag); // src
    				preg_match('/(src)=("[^"]*")/i', $img_tag, $img[$img_tag]);						
    				$img_real= str_replace('"', '', $img[$img_tag][2]);
    				check_image_file_for_webp_converter_custom($img_real, $webp_on_page);
    				
    				preg_match('/(data-src)=("[^"]*")/i', $img_tag, $img[$img_tag]); // data-src					
    				$img_real= str_replace('"', '', $img[$img_tag][2]);
    				check_image_file_for_webp_converter_custom($img_real, $webp_on_page);
    				
    				preg_match('/(srcset)=("[^"]*")/i', $img_tag, $img[$img_tag]); // srcset
    				$srcset= explode(',', str_replace('"', '', $img[$img_tag][2]));
    				foreach($srcset as $src_item){
    				    $src_a= explode(' ', $src_item);
    				    if(isset($src_a[0]) && !empty($src_a[0])) {
    				        check_image_file_for_webp_converter_custom($src_a[0], $webp_on_page);
    				    } else {
    				        if(isset($src_a[1]) && !empty($src_a[1])) {
    				            check_image_file_for_webp_converter_custom($src_a[1], $webp_on_page);
    				        }
    				    }
    				}
    			}
    		}
    
    		preg_match_all('/url\(([^)]*)"?\)/iu', $output, $result);
    		if(count($result)){ // Search images in url css rules
    			foreach($result[1] as $img_tag)	{
    				if(stripos($img_real, 'data:')) continue;
    				$img_real= str_replace(['"',"'"], '', $img_tag);
    				check_image_file_for_webp_converter_custom($img_real, $webp_on_page);
    			}
    		}
    		
    		$webp_on_page['/webp/webp/']= '/webp/';
    		$webp_on_page['//webp/']= '/webp/';
    		$webp_on_page['.webp.webp']= '.webp';
    		
    		if(count($webp_on_page)) $output= str_replace(array_keys($webp_on_page), array_values($webp_on_page), $output);
    		$modx->cacheManager->set($cache_key, serialize($webp_on_page), 0, $options);
    	} else {
    		$webp_on_page= unserialize($cached_webp_on_page);
    		if(count($webp_on_page)){
    			$output= str_replace(array_keys($webp_on_page), array_values($webp_on_page), $output);
    		}
    	}
    	return '';
    }
    
} catch (Exception $e){
    $modx->log(1, 'Та самая бредовая ошибка из-за которой не сохраняются товары');
    $modx->log(1, $e);
}
Vladimir
07 марта 2022, 06:36
0
1)500
2)Пусто
3)Уже не стал смотреть
4)Да нормально
5)Удалил этот плагин и сделал как снипет
<?php
$currentResourceCacheName = "reviews".$modx->resource->id;

if ($modx->cacheManager->get($currentResourceCacheName)) {
    $output = $modx->cacheManager->get($currentResourceCacheName);
}else{

    $activeReviews = 0;
    $totalActiveRating = 0;    
    $avgRating = 0;

    try {
        $reviews = json_decode($modx->resource->getTVValue('reviews'), true);
        
        if($reviews){
            foreach($reviews as $key => $value){
                if($value['is_active'] == '1'){
                    $activeReviews += 1;
                    $totalActiveRating += $value['rating'];
                }
            }
            
            $avgRating = $totalActiveRating / $activeReviews;                        
        }
        
    } catch(Exception $e) {
        $modx->log(1, 'Бред 0');
        $modx->log(1, $e);
    }



    $output = strval($activeReviews).','.strval($avgRating);
    $modx->cacheManager->set($currentResourceCacheName, $output, 36000);
}

return $output;
Vladimir
04 марта 2022, 10:33
0
Вот это работает и записывает данные
$tvcid->setValue($currentResourceId, json_encode($ar));
но поменял на это
$tvr = $modx->newObject('modTemplateVarResource');
$tvr->set('tmplvarid', 25);
$tvr->set('contentid', $currentResourceId);

$tvr->set('value', json_encode($ar));
$tvr->save();
MIGX_id обязательно нужно ставить, иначе сам он не подставляет именно в код
И всё так же уходит в бесконечное сохраннее если этот плагин включен
<?php
switch ($modx->event->name) {
	
	case 'OnDocFormSave':
		if ($resource->get('template') == 3 && empty($resource->getTVValue('reviews'))) {
			$resource->setTVValue('ratingCount', strval(0));
			$resource->setTVValue('activeReviewsCount', strval(0));
		}
		elseif ($resource->get('template') == 3 && !empty($resource->getTVValue('reviews'))) {
			$activeReviews = 0;
			$totalActiveRating = 0;    
			$avgRating = 0;

			try {
				$reviews = json_decode($resource->getTVValue('reviews'), true);
				
				if($reviews){
					foreach($reviews as $key => $value){
						if($value['is_active'] == '1'){
							$activeReviews += 1;
							$totalActiveRating += $value['rating'];
						}
					}
					
					$avgRating = $totalActiveRating / 5;                        
				}
				$resource->setTVValue('ratingCount', strval($avgRating));
				$resource->setTVValue('activeReviewsCount', strval($activeReviews));
			} catch(Exception $e) {
				$modx->log(1, 'Бред 0');
				$modx->log(1, $e);                    
			}


		}

}
Vladimir
04 марта 2022, 09:23
0
Если делать через ресурсы, то человек без прав не может создать migx запись, поэтому пришлось делать так. Всё равно не помогает
Vladimir
03 марта 2022, 08:52
0
Да а если нет он создаёт, и отображает правильно созданный элемент, и даже когда уже есть элементы он правильно всё подставляет, но при попытки сохранить(новые изменения в уже созданных таким методом) таким образом созданные Migx уже уходит в бесконечное сохранение. Да до этого я делал правильно через resource и так далее, но беда в том что это должно работать с авторизированными людьми у которых нет прав на что либо кроме лоад и т.д
Vladimir
03 марта 2022, 08:48
+1
Должно быть так в Действительный URI перенаправления
https://имясайта.ауф/?hauth.done=Facebook
Vladimir
02 марта 2022, 11:57
0
Как вообще понять где берётся эта ошибка, есть там где она возникает, но ведь где-то должен быть место откуда его вызывают, допустим как в случае с js и dev tools
Vladimir
24 февраля 2022, 14:31
0
Да почта там как важный, но довольно странно что не взялась почта при авторизации через соцсети
Vladimir
24 февраля 2022, 08:49
0
Странно, не мог просто перейти даже на главную страницу, сразу возвращало в профиль
Vladimir
22 февраля 2022, 12:40
0
Ёмае, не дождался ответа, расширил админку, добавил поле, почти дошёл до вывода именно способов доставки, так как думал что ответа для такого вопроса не будет, а тут так легко, великолепно спасибо!
Vladimir
22 февраля 2022, 11:44
0
Кстати вроде готовая сборка, но тоже меню не ограниченно первым уровнем в шапке, у меня было 25 тысяч ресурсов оно так и вывело в шапку и в футер, дичайше висла при 25к тысяч ресурсов(по страничной 8 ресурсов на 1 странице) именно при выдаче сортировки, почему так хз, так же как оказалось не было фильтров. Техподдержка отвечает долго, и постоянно говорит что у него работает, проблема у вас. Ставишь свежий модекс там не виснет, делаю свою сборку у меня не виснет, чтобы внести изменения в выводе приходится копаться, страницы некоторые объеденены и сложно что-то делать
Vladimir
18 февраля 2022, 08:34
0
Другого не знал, да и не думал что на обычном хостинге есть доступ к крону, так как он делается через консоль, и получается даже если скрипт будет работать там часа 4, то так же будет выполнятся, или есть лимиты по которым задача убьётся?
Vladimir
18 февраля 2022, 08:23
0
Это отлично, а можете пожалуйста кинуть как-нибудь статью или ресурс где почитать про очередь, чтобы делать вещь на backgrounde, есть такие вещи подобные но как я понял это уже будет не оптимизированно под быструю работу, типо fpm + apache в настройках сервера, отключаем поддержку fastcgi. И только тогда получается fastcgi_finish_request(); и тогда оно в фоне само крутится, типо допустим если файл до гига, это пример с загрузкой на яндекс диск, то можно без него подняв лимиты хостинга но там максимум 300, то set_time_limit(); и ini_set('max_execution_time', 50000); поможет но тоже проблемы, пытался по-другому как-то не получается да и не понятно