+7
Как найти существующие ссылки на объекты?
Для 8.х НайтиПоСсылкам (FindDataByRef)
Синтаксис:
НайтиПоСсылкам (< Список ссылок> )
Параметры:
<Список ссылок> Обязательный
Тип: Массив. Массив со списком ссылок на объекты, ссылки на которые нужно найти.
Возвращаемое значение:
Тип: ТаблицаЗначений. Таблица значений, состоящая из колонок с индексами: 0 — Искомая ссылка; 1 — Ссылка на объект, который содержит искомую ссылку.
Описание:
Осуществляет поиск ссылок на объекты.
Код 1C v 8.х
//Примеры:
Ссылки = НайтиПомеченныеНаУдаление();
ТабСсылок = НайтиПоСсылкам (Ссылки);
Для Каждого Ссылка из ТабСсылок Цикл
Сообщить (" " + Сокр(Ссылка[0]) + " " + Сокр(Ссылка[1]));
КонецЦикла;
//или
Массив = Новый Массив;
Массив.Добавить(СвылкаНаИскомыйОбъект);
СсылкиНаОбъект = НайтиПоСсылкам(Массив);
Для каждого элем из СсылкиНаОбъект цикл
Сообщить(элем);
ОбработкаПрерыванияПользователя();
КонецЦикла;
Функция НайтиПоСсылке имеет особенность: для корректной её работы необходимо, чтоб все объекты были доступны на чтение. Если у вас есть роли, имеющие ограничение на чтение, то вызов функции НайтиПоСсылке можно выполнять только в привилегированном модуле, иначе может возникать ошибка такого рода:
НайтиПоСсылкам(Ссылки) {(1)}: Ошибка при вызове метода контекста (НайтиПоСсылкам): У пользователя недостаточно прав на исполнение операции над базой данных.
Для 7-рки — НайтиСсылки
Находит ссылки на объекты, переданные в списке значений.
Синтаксис:
НайтиСсылки(<Объекты>,<Ссылки>)
Англоязычныйсиноним:
FindReferences
Параметры:
<Объекты> Конкретное значение объекта илиобъект типа СписокЗначений, в котором данной процедуре передаются объекты, по которым надо найти ссылки.
<Ссылки> Идентификатор объекта типа ТаблицаЗначений, в который данная процедура помещает найденные ссылки на объекты. Таблица значений состоит из 3 колонок: 1. Объект — объект, на который ссылаются; 2. Ссылка — объект, который содержит ссылку; 3. Комментарий — комментарий кссылке.
Описание:
Процедура НайтиСсылки находит ссылки на переданные в списке объекты, и помещает их в таблицу значений.
Код 1C v 7.x
СсылкиТЗ=СоздатьОбъект("ТаблицаЗначений");
НайтиСсылки(СсылкаНаТовар,СсылкиТЗ);
//В результате мы получаем ТЗ с ссылками на данный элемент
How can I get a reference to a module from within that module? Also, how can I get a reference to the package containing that module?
martineau
119k25 gold badges164 silver badges294 bronze badges
asked Nov 4, 2009 at 21:42
Ram RachumRam Rachum
83k84 gold badges235 silver badges372 bronze badges
4
import sys
current_module = sys.modules[__name__]
answered Nov 4, 2009 at 21:45
3
One more technique, which doesn’t import the sys module, and arguably — depends on your taste — simpler:
current_module = __import__(__name__)
Be aware there is no import. Python imports each module only once.
answered Jul 28, 2017 at 17:00
Uri LondonUri London
10.6k5 gold badges51 silver badges81 bronze badges
6
If you have a class in that module, then the __module__
property of the class is the module name of the class. Thus you can access the module via sys.modules[klass.__module__]
. This is also works for functions.
answered Nov 4, 2009 at 21:46
MichaelMichael
8,8403 gold badges38 silver badges56 bronze badges
0
You can get the name of the current module using __name__
The module reference can be found in the sys.modules
dictionary.
See the Python documentation
answered Nov 4, 2009 at 21:46
pkitpkit
7,9236 gold badges34 silver badges36 bronze badges
0
According to @truppo’s answer and this answer (and PEP366):
Reference to «this» module:
import sys
this_mod = sys.modules[__name__]
Reference to «this» package:
import sys
this_pkg = sys.modules[__package__]
__package__
and__name__
are the same if from a (top)__init__.py
answered Sep 29, 2020 at 17:04
BrandtBrandt
4,9083 gold badges27 silver badges45 bronze badges
You can pass it in from outside:
mymod.init(mymod)
Not ideal but it works for my current use-case.
answered Sep 20, 2017 at 3:17
Sam WatkinsSam Watkins
7,6893 gold badges38 silver badges38 bronze badges
0
If all you need is to get access to module variable then use globals()['bzz']
(or vars()['bzz']
if it’s module level).
answered Nov 19, 2021 at 11:54
KaroliusKarolius
5231 gold badge5 silver badges12 bronze badges
from importlib import import_module
current_module = import_module(__name__)
PS: see also Sargera’s comment
answered Mar 12 at 12:24
Marco SullaMarco Sulla
15.1k14 gold badges63 silver badges98 bronze badges
0 Пользователей и 1 Гость просматривают эту тему.
- 7 Ответов
- 3048 Просмотров
Хочу, что бы форма обратной связи открывалась модально, нужна ссылка на этот модуль, что бы указать, что будет открываться модально. Помогите пожалуйста..
Хочу, что бы форма обратной связи открывалась модально, нужна ссылка на этот модуль, что бы указать, что будет открываться модально. Помогите пожалуйста..
Все просто, выводи модельное окно в самом шаблоне, и туда добавь позицию модуля… Вот и ВСЕ!
Спасибо, но я не совсем понял, новичёк ещё. Я модальное окно сделал, добавив класс class=»s5mb» (через это-Модуль отображает на сайте фрагмент HTML-кода) к <a class=»s5mb» href=»index.php?option»><img src=»images/1q.png» alt=»» style=»float: right;» /></a>
Спасибо, но я не совсем понял, новичёк ещё. Я модальное окно сделал, добавив класс class=»s5mb» (через это-Модуль отображает на сайте фрагмент HTML-кода) к <a class=»s5mb» href=»index.php?option»><img src=»images/1q.png» alt=»» style=»float: right;» /></a>
Ну здесь есть два решения этой проблемы….
1. Структуру модельного окна поместить в сам модуль и в него же и ссылку которая будет выводить окно. Сам модуль выводи на тех страницах где нужно…
2. Сделать все наоборот первого пункта… поместить модельное окно в сам шаблон, потом позицию модуля выводить в модельном окне, ссылку можно вставить куда угодно, но это окно будет на всех страницах сайта, потому что само окно привязана к шаблону…
P. S. пиши контакты в ЛС разберемся….
Дай ссылку где ты взял код модельного окна…
« Последнее редактирование: 13.03.2015, 16:47:08 от motokraft »
Записан
…
а ссылку на нужный модуль можно как нибудь узнать? что бы просто указать ссылку и всё. Я пробовал узказывать модуль в материал, материал прикреплять к пункту меню, копировать от туда ссылку и вставлять в код, но в модальном окне выводится весь сайт с этим модулем, а надо токо модуль.
а ссылку на нужный модуль можно как нибудь узнать? что бы просто указать ссылку и всё. Я пробовал узказывать модуль в материал, материал прикреплять к пункту меню, копировать от туда ссылку и вставлять в код, но в модальном окне выводится весь сайт с этим модулем, а надо токо модуль.
пиши: https://vk.com/valera_karmanov
Я пробовал узказывать модуль в материал, материал прикреплять к пункту меню, копировать от туда ссылку и вставлять в код
Правильное решение, поскольку в отличие от компонента, модуль не имеет свой ссылки. Вам нужно только добавить к ссылке
если это SEF-ссылка, или
если это динамическая ссылка.
Записан
Не будь паразитом, сделай что-нибудь самостоятельно!
Огромное спасибо! Вы сэкономили много времени!
Наличие скрытых внешних ссылок плохо сказывается на поисковой оптимизации сайта. А их изобильное количество может спровоцировать наложение санкций и понижение в поисковой выдаче. Во избежание подобного казуса, рекомендуется периодически проводить внутренний анализ сайта и избавляться от скрытых внешних ссылок. Для обнаружения исходящих ссылок существует множество всевозможных сервисов и программ. Среди обширного ассортимента я хотел бы выделить совершенно бесплатную программу для внутреннего анализа сайта – Xenu Link. Поверьте, благодаря периодическому использованию представленного софта ваш сайт на CMS Joomla будет выглядеть куда перспективнее в глазах поисковиков. Скачать этот великолепный инструмент можно абсолютно бесплатно, перейдя по ссылке и кликнув «download».
Так вот, допустим, вы установили свеженький шаблон, плагин, модуль либо компонент к себе на сайт Joomla и хотите убедиться, что он чистый? То есть в нем отсутствует энное количество внешних ссылок. Ведь ни для кого не секрет, что расширения, которые распространяются совершенно бесплатно, напичканы обильным количеством левых ссылок. С помощью программы Xenu Link проверить внешние ссылки на сайте достаточно просто, всего лишь нужно следовать нижеприведенным рекомендациям.
О том какое количество внешних ссылок допустимо на одной странице можно прочитать с одноименной статьи.
Поиск внешних ссылок посредством использования Xenu Link
Активировав программу, вместе с основной панелью откроется небольшое окно, в нем нужно выбрать кнопку «Close». После закрытия необходимо отправиться в верхний левый угол и выбрать пункт File/Check URL. Кроме того, то же самое окно вызывается при нажатии иконки файла, расположенного под словом «File». В открывшейся вкладке в верхней строке прописываем домен и нажимаем «OK».
В итоге запустится процесс анализа, который в зависимости от объема сайта займет некоторое время. У меня, к примеру, сайт на момент проверки весил в разархивированном виде 93 Mb — анализ занимал не более 10 секунд. Далее все присутствующие адреса на сайте можно отсортировать, нажав соответственное слово «Address». В моем случае все ссылки, которые ведут на другой адрес, являются скрытыми внешними ссылками.
Важный момент! Помимо закодированных скрытых внешних ссылок встречаются и обычные — незашифрованные. В таком случае достаточно выполнить все нижеприведенные процедуры, но при этом в поисковую строку текстового редактора вставить не base64_decode, а обнаруженную в процессе анализа ссылку.
На представленном скриншоте можно увидеть несколько паразитирующих доменов, которые крадут статический вес проверяющегося сайта.
Как удалить скрытые внешние ссылки
Ну что же, после того как ссылки обнаружены, и неважно где они находятся в шаблоне или модуле, от них необходимо как можно поскорее избавиться. Для этого воспользуемся замечательным текстовым редактором Notepad++. В верхней области открывшейся программы выбираем Поиск/Найти в файлах. В отобразившемся окошке в верхнем поле «Найти» вписываем base64_decode. Это команда, отвечающая за специальный метод кодировки информации в 64-х разрядный код. Именно благодаря данному способу зашифровки в различные расширения, в частности и Joomla, вшиваются скрытые внешние ссылки, которые тяжело обнаружить не вооруженным глазом.
Обращаю ваше внимание на то, что папка с сайтом должна находиться на компьютере, иначе использование Notepad++ для данных целей будет невозможным. Если вы хотите обнаружить вредоносные ссылки на локальном сервере, воспользуйтесь программой Total Commander.
И так продолжим, словосочетание base64_decode прописано в соответственном поле, но помимо этого необходимо задать путь к папке, в которой расположен ваш сайт. Для этого и существует поле «Папка» напротив которой расположена кнопка с троеточием. Кликнув по ней, вы зададите путь проверки определенной папки со всем ее содержимым.
Как можно увидеть на скриншоте, текстовый редактор не только обнаруживает скрытые внешние ссылки, но и указывает путь, в котором они расположены. Файл, который нужно редактировать, указан в конце верхней строки с зеленой подсветкой.
Важный момент! Все закодированные ссылки имеют следующий вид: PHN0eWxlPiNiaWRzZHtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0Oi0zOTQ1cHg7fTwvc3R5bGU+PC9ub2luZGV4Pg==
Поэтому если вы заметили подобные иероглифы, можете смело от них избавляться, но перед этим на всякий пожарный сделайте бэкап файла, который подвергается правке. И еще один важный момент, все закодированные элементы (base64_decode) заканчиваются знаком равно.
И помните, любая скрытая внешняя ссылка похищает статический вес страницы, что плохо сказывается на продвижении сайта. Поэтому не пренебрегайте поиском и удалением скрытых исходящих ссылок.
Спасибо за внимание и до скорого на страницах Stimylrosta.
Обнаружили в тексте грамматическую ошибку? Пожалуйста, сообщите об этом администратору: выделите текст и нажмите сочетание горячих клавиш Ctrl+Enter
Понравилась статья? Угостите админа шаурмой и кофе.
Получение ссылки на общий модуль
Рассмотрим задачу, когда имя общего модуля точно не известно или может измениться, а используемое имя процедуры этого общего модуля известно и постоянно.
Рассмотрим на примере:
Процедура НашаПроцедура()
ИспользуемыйМодуль = ОбщийМодуль(«НужноеИмяМодуля«);
Если ИспользуемыйМодуль <> Неопределено Тогда
Результат = ИспользуемыйМодуль.НужнаяПроцедураОбщегоМодуля();
КонецЕсли;
КонецПроцедуры
Функция ОбщийМодуль(Имя)
Если Метаданные.ОбщиеМодули.Найти(Имя) <> Неопределено Тогда
Модуль = Вычислить(Имя); // ВычислитьВБезопасномРежиме не требуется, т.к. проверка надежная.
Иначе
Модуль = Неопределено;
КонецЕсли;
Возврат Модуль;
КонецФункции
Автор: Дина Королева.
Подписывайтесь на канал
«Полезный 1С»
В телеграм канале — наш практический опыт, бизнес-кейсы и способы повышения эффективности компании, которые мы опробовали внутри группы Neti.
Возврат к списку