Александр Мельник

Александр Мельник

С нами с 02 сентября 2016; Место в рейтинге пользователей: #52
10 марта 2020, 11:27
0
фреймворк — это надстройка над каким-то языком программирования, облегчающая решение типичных задач. Ну по крайней мере я могу дать такое определение. Поэтому jquery это фреймворк языка javascript, laravel — это фрейворк языка php. Так что сравнивать их вполне законно.
Плюс я считаю что в современном мире 90 килабайт кода — это меньше чем весит изображение любое и переживать изза этого не стоит. Может если бы мы работали на компьютерах Атари 600, или камандор Амига — это было бы актуально.
Я ни в коем случае не утверждаю что знать чистый js плохо — наоборот это охренеть как круто! Но сила jquery на данный момент (и на мой взгляд так еще будет несколько лет) даже не в том, что его синтаксис максимально высокоуровневый (близкий к логике человека,) но и в наличии огромного количества плагинов. Да если вы делаете сайт для NASA по учету и слежению за спутниками, с миллиардным буджетом и сроков в 3 года, можно и нужно использовать чистый js. Если вы делаете сайт визитку за сутки — то лучше поставить jquery и установить плагин карусели или fancybox. Ибо может ты и можешь сделать это все с нуля на js но зачем? никто не оценит и даже не поймет.
10 марта 2020, 10:12
0
хм. А сайты вы тоже пишите на чистом php или python?
никаких фреймворков или дополнений из composer? Ведь это тоже по сути — лишние прослойки между программистом и процессором компьютера.
10 марта 2020, 10:11
0
Мне кажется вы так говорите только потому, что на данный момент увлечены этими новыми технологиями. Это не говорит о том что «старые» плохи. Что у vuejs не будет свои версий или вы думаете что они всегда будут совместимы одна с другой?
Да те же яйца только в профиль, просто это более популярная технология.
Завтра придумают что то еще и все будут поливать грязью vue и говорить — ну и гадость, никогда больше ну буду этим пользоваться)
28 февраля 2020, 11:38
0
Кстати есть вопрос по поводу кеширования. Чисто ради саморазвития, если кто в курсе и не лень — подскажите.
Вот тут
docs.modx.pro/komponentyi/pdotools/fajlovyie-elementyi
написано
Файловые сниппеты не кэшируются,
а я столкнулся со следующим.
Вношу изменения в код php файла, сохраняю и ничего при обновлении страницы где вызывается этот файловый сниппет не меняется. Сбрасываю кеш в админке — никаких изменений. Только физическое очищение папки core/cache позволяет увидеть изменения. Почему так, если написано что файловые сниппеты не кешируются. Но если вносить изменения в tpl -ку которая используется для вывода то тут любые изменения сразу видны на странице.
28 февраля 2020, 10:54
0
Почему такое происходит со стандартным сниппетом msProductOption не разобрался.
Написал свой.
Может кто-то столкнется с такой же проблемой и найдет по поиску эту статью (хотя уж простите Василий, но поиск на этом сайте работает ужасно, хотя гугл хорошо все индексирует и компенсирует этот момент) — то приведу свой код здесь.
Сниппет получения опций
<?php
$product = $modx->getObject('msProduct', array('id' => $modx->resource->id));
$productData = $product->loadOptions();
$options=[];
$optionsName=[];
foreach ($productData as $k=>$v) {
    if (is_array($v)){
        $optionsName[]=$k;
    }
}
foreach($optionsName as $name){
    $options[$productData[$name.'.caption']]=$productData[$name.'.value'];
}
$pdoTools = $modx->getService('pdoTools');
return $pdoTools->getChunk($tpl, array(
    'options' => $options,
));
Вызов на странице
{'@FILE snippet/optionList.php'|snippet:[
                                'tpl'=>'@FILE tpl/optionsList.tpl',
                                ]}
Используемый чанк для вывода
{foreach $options as $name => $value}
{if $value?}
    <div class="config">
        <div class="config__title">{$name}</div>
        <div class="config__col">{$value}</div>
    </div>
{/if}
{/foreach}
По крайней мере в таком виде опции отображаются всегда и не пропадают, даже если товар размещен виртуально в другие категории.
27 февраля 2020, 21:30
0
Да, спасибо.
Я вывел уже опытно-эмпирическим путем, что значение по умолчанию — оно не для выборки. Просто не знал об этом раньше.

Но раз уж мы тут собрались, то у меня возникла еще одна проблема, причем вполне подозреваю, что я тоже не знаю каких то нюансов.
Опишу, может подскажите.

Есть товар. Есть несколько опций созданных в настройках minishop и привязанных к категории, в которой товар. Заполнили опции значениями. Сохранили товар. На странице опции выводятся совсем уж просто
{'!msProductOptions'|snippet:[
                                'tpl'=>'@FILE tpl/optionsList.tpl'
                                ]}
Они роскошно выводятся. Но тут менеджер берет и ставит на вкладке — Категории у этого товара галочку для привязки его к другой категории. Товар продолжает отображаться как был, все ок — но больше ни одного значения характеристики нет.
Сначала решили что это потому, что у категории, куда мы его виртуально поместили не привязаны эти же опции. привязали. Снова ничего. Страница товара открывается, товар физически лежит в той категории где и нужно, но опций нет (имеется ввиду не выводятся сниппетом, в админке то они есть и заполнены.)
Убираем галочки, снимаем привязку к другой категории и вуаля — сразу на странице вывелись все опции.
Нет идей? Было бы интересно.
27 февраля 2020, 20:31
0
о боже, откуда вы это нашли) Попробую, правда уже несколько переписал логику работы.
Но для развития нужно опробовать. Каюсь, я писал почти так же как и вы (поняв из логов что TVis_present это что то типа псевдонима ), но я писал так — 'where' => ['TVis_present.is_present' => 1]
27 февраля 2020, 20:26
0
Вот видите я не знал о таком нюансе, считая что раз есть значение по умолчанию то с ним можно полноценно работать во всех смыслах это слова, в том числе и для построения условия.
Исключающая выборка для меня не вариант. К примеру, у ТВ есть значения 0 и 1. По умолчанию 1.
А мне на странице нужно вывести сначала все у кого она =1, а потом все у кого она равна = 0.
Но и та и другая выборка дает пустой результат, поскольку в таблице site_tmplvar_contentvalues вообще нет записей о моем ресурсе.
27 февраля 2020, 19:52
0
Мой маразм крепчает.
Господа, а вот значения ТВ по умолчанию, они как хранятся?
К примеру я создал ТВ у которого варианты 1 или 0. И говорю что по умолчанию — 1.
И все работает супер, при создании ресурса значение по умолчанию отображается.
Но тут начинается интересное — в базе оно отсутствует.
Насколько я понимаю для хранения соответствия между ресурсами и значениями ТВ используется таблица site_tmplvar_contentvalues
и что самое интересное — в ней нет значений по умолчанию. Тоесть я создал ресурс с id = 100 и к нему прикреплен ТВ с id =30 у которого задано значение по умолчанию, то эта связь не попадает в таблицу.
И вот ответ почему я не могу сделать выборку по значениям ТВ.
Но если пойти в ресурс и сменить значение по умолчанию на другое, сохранить, то в таблице site_tmplvar_contentvalues прекрасная запись возникает и сразу по этому значению выборка начинает работать.
Дальше лучше, если снова у ресурса выставить значение по умолчанию, то строка в таблице site_tmplvar_contentvalues исчезает.
Разве так и раньше было? Что-то очень это странно.
Получается я выставил значения по умолчанию у тв, чтобы облегчить заполнение, но сам себя лишил возможности полноценно с ними работать и делать выборки.
Кто еще сталкивался? Что это — глюк или так и было всегда?
забыл добавить — но при это значение по умолчанию этой твишки я могу вывести в шаблоне и так далее, но не использовать в выборке(
27 февраля 2020, 17:57
0
{ignore}
                        [[!pdoResources?
                        &tpl=``
                        &includeTVs=`is_present`
                        &tvPrefix=``
                        &where=`{"is_present":"1"}`
                        ]]
{/ignore}
такой вызов также ничего не находит
Хотя без указания where вижу что есть ресурсы с 0 и есть с 1
26 февраля 2020, 15:18
0
О боже, у вас в команде есть даже девопсы и прочие люди)) У нас есть я и уже около 40 проектов, часть из которых разработана мной, а 80 процентов — набранные со всего мира сайты на джумле, битриксе, опенкарте, слим и еще несколько разных cms.
26 февраля 2020, 15:15
0
Спасибо за столь подробное описание.
Добавить особо не чего, единственно что смущает — в большинство случаев я к примеру и не знаю где лежат файлы той же mysql базы данных. Даже если я сам админю сервер и поднимаю все нуля, то я делаю apt install mysql-server и все, я не выбираю куда сложить файлы. А выходит чтобы использовать в докере mysql то придется серьезно повышать уровень знаний, иначе на первый взгляд покажется что все работает, пока контейнер не упадет и все данные из него просто пропадут.
26 февраля 2020, 08:59
0
Спасибо. Чисто на интуитивном уровне я именно так и понимаю.
Нужно наверное заняться практикой и много вопросов отпадет.
Что я не понимаю
— все таки это не виртуальная машина, а виртуальный контейнер и внутри его нет операционной системы. Контейнер использует ядро гостевой операционки. Но при этом внутри контейнера есть своя файловая система. По крайней мере я так сужу из ответов, которые получил задавая комменты на ютубе. То как знать какая именно внутри файловая система? Какие там есть директории и так далее. И плюс зачем тогда существует докер образ Ubunty? Тоесть при запуске этого образа развернется полноценная операционная система? Со своей файловой системой, своими демонами, процессами и так далее? У меня есть ubuntu server установлен на физическом сервере. Установлен docker и запущен контейнер ubuntu. У меня есть возможность подключится к виртуальной ubuntu? по ssh или как либо по другому?
— насколько я понимаю, при остановке запущенного контейнера все данные в нем теряются. Ведь контейнер создается из образа и если произошел сбой или же запланированная остановка контейнера, то новый контейнер запуститься из того же образа и будет девственно чист. И как тогда работают контейнеры с базами данных? Да я вижу что к контейнеру можно примонтировать внешнюю директорию и хранить данные на ней, но получится что вам каждый подключаемый в свой проект образ (вернее создаваемый на нем контейнер) придется очень долго и нудно конфигурировать, подгоняя под реалии операционной системы на которой он запущен (к примеру даже у линуксов не у всех структура и название директорий операционной системы одинакова). Тоесть есть три ветки продуктов линукса- основанные на redhat. arch и debian. И они во многом отличаются. Если на одном сервере установлена centOS (родитель redhat) а на другом Ubuntu (родитель Debian) то их файловые системы хоть и схожи но не идентичны. Но это ладно, но ведь сервер может работать и на windows, а docker тоже может работать на windows. И как тогда запустить контейнер с приложением, если у него в докер файле например пути прописаны /usr/bin и содержаться команды для оболочки bash
— от имени какого пользователя это все работает? Как и кто это контролирует? К примеру я недавно испытывал технические проблемы на одном сервере, что возникала ошибка при работе с сессиями в php. Оказалось что в конфигурации php указывается директория где будут хранится файлы сессий и пользователь от имени которого запускался интерпретатор php не имел прав на запись в эту директорию. Или к примеру веб сервер apache запускается от имени пользователя www-data и только он может полноценно работать. А кто пользователь внутри контейнера? Тот кто его запустил? Но если судить по документации на офф сайте то докер работает из под root а значит мы все процессы запустим от root?
25 февраля 2020, 22:36
0
И не по теме вопрос, а вернее не вопрос даже, а удивление. Я вижу вы используете докер. И что правда удобно и нужно? Я вот второй день чисто ради новых знаний (хочется хоть чуток быть в тренде, хотя я совершенно не испытываю необходимости в этом инструменте) изучаю документацию и видео на эту тему и признаюсь — не понимаю ни как это работает ни по большому счету зачем оно нужно. (нет красивыми фразами навешать на уши я смогу кому угодно что это очень нужно, что помогает деплою да и вообще песня а не инструмент, но по факту..) Смотрел видео где вполне адекватный человек признается в любви докеру, хорошо и доступно поясняет и приводит примеры. И первый пример — это файл на python который выводит hello world. Один текстовый файл. Делает из него образ, подключает образ python3 и запускает контейнер на основании этого образа. И… образ весит 950 мегабайт. Один текстовый файлик с одной строкой кода превратился в 950 мегабайт какой-то информации. Может посоветуете какую-то хорошую информацию? А то вопросов в миллион раз больше чем ответов.
25 февраля 2020, 22:27
0
Круто, но нужно будет вникнуть по подробнее, а когда на это находить время не ясно.
Вопрос! Я столкнулся с этим когда пытался использовать gitmodx Зернова. У него тоже есть скрипт для перегонки чанков (и не только с базы в файлы) но был такой глюк (ну или скажем недочет). Если чанки в базе названы корректно (одним словом и латинскими буквами) то все ок. Но мне иногда приходят на обслуживание созданные кем-то сайты, где чанки названы к примеру так — «слайдер на главной странице» — тоесть киррилицей и в несколько слов и modx это позволяет. Но при переводе это в файлы — вместо названия «кракозябры» и плюс скрипт в gitmodx удалял после этой операции данные из базы. И ты остаешься с файлом, который уже не знаешь как назывался и не можешь его использовать.
В общем просто проверьте на такую возможность.
25 февраля 2020, 22:14
0
Проверял. Я несколько раз переустанавливал и следил за кодировкой. Кодировка utf8_general_ci
25 февраля 2020, 19:46
0
Кстати еще одна странность.
Вроде бы Василий все чанки minishop уже давно переписал на fenom.
Может я какой-то неверный minishop себе установил, но у него чанки выглядят вот так

посмотрел версию 2,5,0pl
25 февраля 2020, 18:47
0
Побоялся, что в дальнейшем вылезут еще где-нибудь проблемы.
Перенес разработку на другой сервер, на котором версия mysql 5,7
Лучше потеряю сутки работы сейчас, чем когда проект будет готов на 90 процентов вдруг вылезет какой-то косяк.
Но все равно очень странно, ведь раньше подобных ошибок не возникало на этом же сервере при этих же настройках.
24 февраля 2020, 20:00
+1
Нужно понимать, от кого именно вы скрываете эти страницы?
От посетителей? Тогда просто не выводите нигде на сайте на них ссылки.
От поисковых систем?
Тогда наверное самым правильным решением будет все же назначить им шаблон. А в коде шаблона вызвать какой-нибудь самописный сниппет, который сделает редирект если кто то посетил эту страницу. Ну к примеру сделает редирект на страницу самого свежего ребенка в этой категории.
24 февраля 2020, 16:01
+1
Функционал стандартный, без настроек:
а что это за стандартный функционал с вкладкой — файлы? я такую никогда у себя в проектах не видел, по моему это никак не «стандартно».