Всем доброй ночи.
Был сайт с каталогом, но в результате пришлось ставить ubercart. Цена всех товаров уже была прописана с помощью CCК-поля. Очень не хочется переделывать цены всех товаров, поэтому возник вопрос: можно ли где-нибудь прописать какое поле будет использоваться вместо стандртного поля цены. Или придётся переписывать заново цены на все товары?
Комментарии
Нельзя, это поле используется во всем API уберкарта, перенести все цены из cck в убер вроде можно одним SQL запросом. Структуру таблиц убера к сожалению уже не помню, потому запрос подсказать не смогу. Учите мускул и смотрите таблицы cck и убера
Спасибо за ответ. Наверно проще будет перекинуть все цены вручную
А не проще хакнуть корзину и дописать свою функцию отображения цены?
Я так сделал на одном проекте.
Надо было сделать 5 цен для разных ролей.
Решение:
1. Написана функция принимающая на вход цену, и возвращающая новую цену
2. Хакнута корзина
3. Все выводы цен обернуты в мою функцию.
не вижу смысла для хаков в данной ситуации, вреда будет больше чем пользы.
это самый самый "друпал вэй", и от хаков еще никто не умирал. Попробуйте изменить без хаков )))))
Когда у человека всего 1 поле для цены, причем, как я понял, даже товар без опций, то в данном случае хаки будут извращением, я представляю Ваше лицо, когда Вас попросят починить простейший сайт-визитку, который загнулся после обновления, из-за того, что кругом одни хаки.
По поводу 5 разных цен - можно использовать опции, однако не выводить их покупателю, и делать выбор опции в зависимости от роли пользователя, другой вопрос, что выглядеть это будет несколько через ж(впрочем, как почти половина всего, что делается с убером), да и задачи разные бывают. Хаки очень удобны, если без них придется полностью отказываться от модуля, в сторону своего аналогичного, ввиду отсутствия альтернатив.
Хаки для того и созданы чтобы этого не случалось.
Такая ситуация возможно только если вы правите существующий модуль.
Или руки из жопы растут )
Несколько противоречит
Хак это и есть правка уже рабочего+существующего+чужого+официального модуля, в т.ч. входящего в состав ядра... И они слетают при первом же обновлении, потому, для большего удобства сразу создаются патчи, которые после обновления накладываются на хакнутое, однако бывают ситуации, когда патчи еще и не накладываются, ввиду кардинальных изменений в новой версии оригинального модуля, более подробно про удобную систему работы с этой ерундой грозился описать RxB
Вы ничего не путаете??? Это называется патч.
Как переопределенная функция может слететь?
Вам в песочницу с такими заявлениями.
Хак это перехват выполнения чужой функции и дописывание своего кода. И даже после глобального обновления модуля, помимо версионных. Ничего слететть не может. Т.к. переопределенная функция всегда возвращает ваш результат. И что бы они там не изменили, не имеет значения.
Другое дело версионные изменения. Когда меняется структура вывода хотя бы одной АПИ функции модуля, изменения считается версионным, и тогда ваша хаки тоже надо обновлять (адаптировать) под новую версию, если затронуты связи с ним.
Вы точно не путаете понятия хак и хук?
Хак (hack) (он же патч, patch) - это изменение кода ядра или модулей. Слетает после обновления этих модулей.
хук (hook) - это возможность переопределить некоторые функции, для которых эти самые хуки были предусмотрены. Это правильный кошерный способ, но НЕ ВСЕ функции друпала можно переопределить.
P.S. По теме топика - 1 MySQL запрос всегда проще и быстрее, чем что-то кодить, ведь автор будет делать это 1 раз, поэтому писать код не оправданно.
Хак (hack) (он же патч, patch) - где это вы видели такое определение?
Хак и хук одинаковые понятия в русскоязычном сообществе. Хакнутая функция - это функция у которой переопределен вызов (т.е. hook). Вы же не скажете хукнутая корзина? =))) Такого слова просто не существует.
Поэтому говорим хакнутая.
А вообще, возможно, в этом разговоре просто произошло недопонимание.
Естественно я имел ввиду хук в первом посте.
А если продолжать разговор об идеологии слов hack и hook, то это не имеет смысла, т.к. у обоих слов пересекающаяся смысловая интерпретация.
hook - захват
hack - зарубка, зазубрина
Либо вы захватываете чужую функцию, либо ядром друпала предусмотрена зарубка в вызове функций.
Т.е. хак производит ядро друпала, а сам результат хук пишет пользователь.
Как не назови - в итоге получаем "хакнутую корзину".
Ну, давайте все-таки использовать терминологию друпала, раз уж мы на друпаловском форуме. Здесь под словом хак понимают изменение кода модуля. Причем непосредственно в файле этого модуля.
Вы можете говорить как угодно, но это может вызвать непонимание )
Вы что дровосек? Какие еще зарубки? ))))
Вот здесь мозг уже закипел )))
В друпале не так много типов функций, которые можно переопределить. В основном, это функции связанные с темизацией и выводом контента.
Вы можете вызвать соответствующие хуки и каким-то образом изменить результат их работы. (но не саму логику работы функции). Это делается в своем модуле, вызывая соответствующие хуки.
А если вам необходимо изменить логику работы функции, например, изменить работу функции node_load - то без непосредственной правки кода этой функции в модуле ядра вам не обойтись. Это хак.
Может все-таки темизированную? Или просто с расширенным функционалом.
Когда мы добавляем элементы на форму с помощью хука hook_form_alter, мы же не говорим, что мы хакнули форму.
Случайно дважды запостился.....
Вообще-то, если почитаете форум тут часто именно так и говорят ))))
hack от слова hacker.
hacker это человек, который может влезть в выполнение чужой процедуры и поставить hook, который даст ему доступ к этой процедуре.
Т.е. процесс прерывания выполнения чужой функции называется hack, а переопределенная функция hook.
Дубль
Дубль
Дубль
Интернет подвис и 4 дубля...
Хак в Вашей версии, это инструмент для добывания смолы из сосен, и к делу не имеет никакого отношения.
Так же Хак - это такая фамилия(причем довольно известная в некоторых кругах)
Других официальных значений у этого слова нету, почему то.
Однако, изначально хакер, это действительно плотник, занимающийся рубкой по дереву, при помощи соответствующего инструмента(однако, в т.ч. топора).
Хакерами в ИТ называли высококвалифицированных программистов, которые исправляли ошибки в ПО быстрым и не совсем красивым, топорным, и заметьте, не фен шуйным способом(прямая правка кода, основной массовый промысел - кряки в пиратском ПО), откуда собственно и название(т.е. по сути работа топором в ПО), есть еще и альтернативные версии, вроде еврейских корней, но к данной теме оно не совсем подходит. В CSS это выглядит немного иначе - вместо прямых правок кодов, просто используются внутренние функции различных браузеров, по сути тот же самый хак(т.е. результат работы хакера, т.е. результат работы топором, что по сути можно трактовать как зарубку, т.е. Хак)
Теперь хук - это ловушка, суть в том, что для реакции на какое либо действие, приложению\коду\еще кому-то, необходимо как-то это действие распознать, и желательно не наваливаясь на распазноваемое(иначе многозадачности капут), для этого эти самые приложения\etc выставляют так называемые ловушки, они же хуки(причем делается это абсолютно легально), которые, при срабатывании этих действий, будут вызваны программой/ОС/еще чем то, с передачей в них информации об этом событии(в виде аргументов функции), хуки используются далеко не только в друпал. Или же вы хотите сказать, что драйвер на клавиатуру(регулятор громкости, например, работает именно через хук) - это тоже хакерское ПО?
Конкретно в Друпал:
Хук - это не изменение и даже не переопределение, это всего лишь дополнение к выполнению основного кода(как уже описано выше, и собственно не только в друпал)
1 сработало событие
2 отработался некий основной скрипт(обычно начальная подготовка аргументов)
3 вызвались все установленные хуки
4 результат сохраняется или с ним проводятся какие либо другие действия
а в случаях, когда приходится переопределять результат работы основного модуля(например убрать поле из формы), это называется в простонародии "костылем"
Хак - топорный способ, т.е. грубый, т.е. тот который стоит использовать в самую последнюю очередь, либо в УГ сайтах(по аналогии, например стул, если он полностью сделан с помощью топора, на нем ведь не очень будет удобно потом сидеть?), в данном случае, просто правка кодов уже готовых модулей.
А теперь откройте словарик и посмотрите значение.
И не забывайте про их виды.
Вы из хакера делаете какого-то недоучку и сами себе противоречите.
Высококвалифицированных программистов, которые не совсем красивым, топорным, и заметьте, не фен шуйным способом что-либо делаю...что это за зверь такой?
То что вы привели в пример - просто недоучки, которые смогли освоить только ассемблер на базовом уровне и помимо банального метода тыка в поиске возможной дыры процедуры защиты не могут ничего другого.
Да согласен, что они занимаются этим, но правильный способ взлома чужой программы именно во внедрении своего хука или "ловушки", если вам так больше нравится. Занимался этим в молодости, поэтому и говорю. Отсюда и моя аналогия между хуками и хаками, т.к. в понимании хакера это одно и тоже, а вернее две части одного и того же.
Хаккинг(Хак) - это процесс.
Хук - это код.
Хакнутый - это результат.
Ничего не противоречу, можно сделать топорно, не красиво, но быстро и в рабочем виде, а можно месяц переписывать аналог(а в случае, например, с фотошопом, или еще круче, с виндой, придется писать почти полный аналог ПО). В частности в друпал, можно полностью переписать модуль, а можно переписать только 1 строчку в готовом, 2й вариант не красивый, топорный, но рабочий и экономит огромную кучу времени(например, 1 минута против нескольких дней), однако имеет определенные последствия, по тому и называется хак.
Реальный пример - Ubercart 2, под модуль uc_file, при скачивании файла из вложенных папок, пользователь получает файл вида folder1_folder2_folder3_filename.ext, т.е. в имени файла присутствует вся структура папок, после папки, указанной в настройках уберкарта, для полного счастья не хватает еще и пути до папки с файлами, а нужно именно filename.ext, по сути это баг(либо так задумано, я так и не понял), влезть в функцию передачи файла невозможно ни через какие хуки, Ваши варианты? Изменить одну строчку в коде модуля - грязный, не кошерный, не красивый, да еще и не правильный способ, однако быстрый и главное - рабочий, вот и реальный пример хака.(на самом деле 2 строчки(отображение в админке тоже через одно место), однако 2ю строчку в том же модуле можно изменить через хуки, однако это не совсем быстро и довольно большая нагрузка, да и "гулять так гулять")
Про словарик - инфа, которую я давал, взята с википедии. Да, там есть и другие значения, однако выбрал наиболее исторически подходящее и именно для программистов, ибо значение слова "хакер" - для менеджера это одно, для рабочего цеха другое, для друпалера третье, для домохозяйки четвертое и т.д.
Хак - это результат
Сделать Хак, Хаккинг - процесс
Хук - это технология
Хакнутый - это прилагательное, по сути свойство
ну и чтоб не это
вот
и вот
(кириллица в url все таки ужас)
Выдержка с последней ссылки:
Овер
Решал так http://stillfinder.net/blog/dobavlyaem-perecherknutoe-pole-staraya-tsena...