Как в битриксе найти нужный файл

Загрузка и поиск файлов

Урок
18
из
293

Сложность урока:

1 уровень – интуитивно все понятно из интерфейса, но почитать стоит.


1 из 5

Дата изменения:
12.02.2023

Просмотров:
62345

Недоступно в лицензиях:

Текущую редакцию Вашего 1С-Битрикс можно просмотреть на странице Обновление платформы (Marketplace > Обновление платформы).


Ограничений нет

  Загрузка файлов

Для

загрузки файлов






перейдите с помощью

Менеджера файлов

Некоторые операции по работе со структурой можно выполнить только из административной части. В этом случае контент-менеджер может воспользоваться Менеджером файлов, который предоставляет широкие возможности по работе с файлами и папками, а принципы его работы повторяют знакомый всем проводник Windows.

Подробнее в курсе Контент-менеджер.




в папку, в которую нужно загрузить файл и нажмите кнопку на контекстной панели Менеджера файлов. Откроется сама форма загрузки файлов:

Нажмите на рисунок, чтобы увеличить

Число загружаемых файлов неограниченно.

Примечания:

  • По умолчанию в настройках системы установлено ограничение на размер загружаемого файла в 2 мегабайта. Если есть необходимость изменить это ограничение, то это можно сделать в файле php.ini в параметре upload_max_filesize.
  • Система поддерживает использование файлов с именами как на латинице, так и на кириллице, без ограничений по регистру. Недопустимо только использование спецсимволов: / ? * < > ” ‘.

  Поиск файлов

В рамках файловой структуры есть механизм поиска файлов, размещающийся на контекстной панели в виде кнопки

Поиск




. Откроется окно поиска:

Поиск ищет как по имени, так и по содержимому. Ограничения можно наложить следующие:

  • По папке или сайту
  • Дате изменения;
  • Размеру файла;
  • Регистру.

Кнопка Подсчёт покажет общее число файлов, удовлетворяющих указанным условиям поиска.

С помощью поиска можно произвести замену слова или фразы в файле. Для этого воспользуйтесь закладкой Замена.

Какие-то вредные советы понаписали. Потом заходишь на сайт, а там все оптимизации выключены, потому что какому-то разработчику несколько лет назад так удобно было, видите ли.

624ed49f84ec3272032369.png

1. В этих оптимизированных файлах написано, откуда были взяты исходники.
2. Часто подключаются минифицированные файлы, но править надо не минифицированные. В папке можут лежать файлы style.css и style.min.css. Правите style.css, сохраняете. Минифицируете его и сохраняете минифицированную версию в style.min.css.
3. Если файлы подключаются с помощью API Битрикс, то кеш сам сбрасывается при изменении файлов. Если у кого-то не сбрасывается и они делают это вручную, то они просто не умеют подключать стили.
Как надо:

use BitrixMainPageAsset; 

 Asset::getInstance()->addJs('/путь/скрипт.js'); 
 Asset::getInstance()->addCss('/путь/стиль.css');

4. Проще всего искать нужный файл с помощью утилиты grep (работает на линукс, в винде тоже можно поставить)
Если начнете искать по всему сайту, то будет очень долго. Стили чаще всего лежат в папке шаблона, там и надо начинать поиск.
Видите например на сайте элемент <div class="any_selector"></div>. К нему хотите стили найти.

В терминале вводите:

cd local/templates/my_template
grep -r "any_selector" . --include=*.css

Вам выдаст список файлов, где есть упоминание any_selector

Можете за одно почитать про инструменты хрома, там и файлы css можно найти и js
https://r-morozov.ru/javascript/instrumenty-debaga…)

Добрый день! Есть сайт на CMS Bitrix, написанный на PHP. На главной странице есть всплывающее окно для заполнения параметров обратного звонка. Один из заполняемых параметров окна имеет выпадающее меню вариантов. Я администратор и у меня есть доступ к структуре сайта по FTP (Mozilla). В консоли панели разработчика Chrome я нашел ту часть кода, где нужно поменять выпадающие позиции (они перечислены в теле кода). Но я не могу найти исходный файл с этим кодом в структуре файлов. Обратиться к разработчику нет возможности.
Поиск через меню консоли не дал результатов.
Подскажите, где в структуре сайта стоит поискать: тип файла, возможные названия.
С PHP, HTML, JS знаком. Привожу фрагмент кода из консоли.**введите сюда описание изображения**

задан 28 авг 2017 в 11:53

user265072's user avatar

6

если есть полный доступ, можно скачать сайт к себе и в notepad++ сделать поиск по папкам/файлам на предмет: “</select>

думаю, что код захвата данных с базы находится между атрибутами <select></select>

Всплывающие окно может быть из js скрипта, можно поискать по вариациям display = "none" или display для поиска кода внутри js.

В любом случае нужно искать в исходном коде, а не в сгенерированном в браузере.

ответ дан 2 сен 2017 в 5:42

Leo Tahk's user avatar

2

Вы замечали что иногда поиск по документам на диске (и не только) в коробочной версии Битрикс24 не всегда ищет по содержимому, а в последних версиях он вообще не ищет по содержимому документов? А уж об индексации pdf/jpg и других форматов так и вообще можно забыть. Нет, на самом деле это немножечко не так и эта особенность поддается корректировке.

Заинтересовались? Поехали!

Как устроен поиск в Битриксе?

Исторически в платформе всегда использовался поиск средствами модуля Поиск. Когда создается элемент инфоблока специальный механизм применяется к элементу и собрает с него поисковый контент, который токенизирует и складывает в отдельные таблицы b_search* и когда пользователь начинает вводить поисковый запрос, он разбивается на токены и ищется в этих таблицах. Время шло и со временем поиск перестал удовлетворять по критериям скорости и объема информации. Так поиск получил возможность интеграции с sphinx.

Для 1С-Битрикс: управления сайтом такого варианта вполне хватало: был либо поисковый запрос либо параметры фильтрации, однако пользовательский сценарий работы в Битрикс24 подразумевает использование обоих механизмов, что делает текущие варианты не эффективным. Разработчики Битрикс24 решили перейти на фильтрацию с полнотекстовым поиском в MySQL что дает возможность одновременного использования фильтрации и поиска.

Презентацию можно сказать по ссылке: скачать презентацию

Таким образом каждый элемент битрикс24 в своей таблице (или отдельной таблице) содержит некоторый столбец с текстом, по которому выполняется полнотекстовый поиск. Когда вы создаете сделку/контакт/загружаете файл в соответствующей таблице в этот столбец записывается конкатенация параметров и когда производится поиск то он осуществляется именно по этому столбцу.

Как включить индексацию диска?

Для базовой настройки индексации достаточно активировать эту возможность в настройках модуля Диск.

Админ.панель - Настройки - Настройки продукта - Настройки модулей - Диск
Админ.панель – Настройки – Настройки продукта – Настройки модулей – Диск

Достаточно простое действие: отмечаем нужные опции, задаем максимальный размер документа и переходим в публичную часть общего диска.

Индексация документов в действии
Индексация документов в действии

Не сказать что процесс длительный, но может занимать несколько дней. Зависит конечно же от размера ваших документов и того где они находятся.

Например для 10 маленьких локальных документов это может быть 10 минут, а для тысяч документов расположенных в облаке этот процесс может растянуться на недели или даже месяцы.

Как именно индексируются документы?

Если с текстовыми полями все более менее понятно: берем значения и пишем в поле, то как происходит извлечение информации из файлов?

При включенной индексации содержимого файлов для каждого загружаемого файла последовательно вызывается обработчик события OnSearchGetFileContent модуля search. Результат первого обработчика и будет является контентом документа (остальные обработчики даже не будут вызваны). Для файлов таким обработчиком внезамно является модуль Интранет (на событие подписан класс CIntranetSearchConverters с его одноименным методом OnSearchGetFileContent, найти который вы можете по пути: /bitrix/modules/intranet/tools/search.php)

Думаю не нужно объяснять, что для работы с MSOffice форматами, выбором языка программирования PHP будет не лучшим решением. Разработчики битрикса это в целом тоже понимают, поэтому для извлечения контента они используют внешние команды.

Что такое внешняя команда?

Это любое linux приложение вызванное через php-функцию exec от пользователя под которым запущен apache, которое получает на вход путь к документу и выводит на экран текстовое содержимое.

Например для конвертации doc-формата используется linux приложение catdoc. Часть из них вы можете найти в настройках модуля интранет, другая часть зашита в ядро продукта

Из коробки помимо перечисленных форматов индексируются так же: docx, odt, odp, ods, rtf, xlsx, pptx.
Из коробки помимо перечисленных форматов индексируются так же: docx, odt, odp, ods, rtf, xlsx, pptx.

Не расстраивайтесь, если вашего формата в списке нет, вы можете использовать или даже написать любое приложение, которое по пути к файлу будет проводить индексацию документа, т.е. возвращать его описание или содержимое.

Из хороших идей, можно сделать:

  • ML-парсер изображений (писать в духе поисковых систем: “на изображении человек”
  • Распознавать текст на картике
  • Проводить распознавание речи для аудиофайлов

Не устраивает качество?

И хотя в битрикс24 имеется стандартные способы индексации, всегда можно их изменить. Например, меня не очень устраивает стандартная индексация docx файла: она медленная и не полная. Я обычно в таких случаях ставлю на linux-овую виртуальную машину libreoffice (последняя, на момент работ была 6.4) и прописываю доп. строчку в настройках модуля Интранет:

Расширение: docx

Внешняя команда: libreoffice6.4 –headless –convert-to “txt:Text (encoded):UTF8” # FILE_NAME# –cat –outdir /tmp

Каталог программы: /usr/bin

P.S. Между # и FILE_NAME# не должно быть пробела – это дзен ставит хеш-теги

Только убедитесь, что выполнение команды под пользователем bitrix на файле docx формата выводит его содержимое в консоль 🙂

Блог «Дивасофт»

4 сентября 2019, Михаил

Нельзя просто так взять и получить настоящий файл для дальнейшей манипуляции с ним. В api такого нет. ORM d7 в помощь


<?php 
function getRealFileFromDiskById($diskId) {
	    BitrixMainLoader::includeModule('disk');
	    $resObjects BitrixDiskInternalsObjectTable::getList([
	            'select' => ['NAME''FILE_ID'],
	            'filter' => [
	                '=ID' => $diskId,
	            ]
	    ]);
	    if ($arObject $resObjects->fetch()) {
		        $arObject['PATH'] = CFile::GetPath($arObject['FILE_ID']);
		        $arObject['FULL_PATH'] = $_SERVER['DOCUMENT_ROOT'].$arObject['PATH'];
		        return $arObject;
		}
	    return false;
	}

?>

Добавить комментарий