Durante todo el tiempo que trabajé con Bitrix, tuve la oportunidad de trabajar con una gran cantidad de proyectos que alguien desarrolló antes que yo. Aquí hay mejoras menores, corrección de varios errores y errores de la lógica, rediseño del sitio web y cambios globales en la funcionalidad existente. Y, como cualquier otro desarrollador, odio rastrillar la basura, las muletas y los parches "temporales" de otra persona, que de hecho son recordados por otra edición 8 del producto.
Aquí trataré de no centrarme en las "peores prácticas" estándar al programar en PHP, como no tener en cuenta la elección de nombres y funciones de variables, consultas innecesarias de bases de datos en un bucle, falta de comprobaciones de datos de usuario en formularios, ignorar comentarios y similares. Trataré de mencionar exactamente los momentos inherentes al desarrollo en Bitrix, lo que posteriormente permitirá evitar la indignación y las maldiciones contra usted por parte del programador que tuvo que acompañar su código. Y sí, a menudo te convertirás en este programador en un año o más, cuando olvides por completo por qué insertaste esta o aquella muleta aquí.
"Escriba el código como si fuera acompañado por un psicópata violento que sabe dónde vive" (c) John F. Woods
El primero, y el más importante, en mi opinión, es importante: por el amor de Dios,
use la carpeta local . Simplemente es vital cuando se utiliza el sistema de control de versiones: todo lo que necesita hacer es agregar la carpeta / bitrix / a las excepciones. Eso es todo. Además, casi todo el desarrollo se lleva a cabo solo en él. Esto simplifica enormemente la búsqueda de los archivos y componentes necesarios más adelante, ayuda a no obstruir el repositorio con archivos innecesarios y, de hecho, le da al árbol del proyecto un aspecto más ordenado y "humano".
No modifique el núcleo . Incluso si está seguro de que no se actualizará. Incluso si es más rápido. Incluso si eres flojo. Olvida este pensamiento como una pesadilla. Si necesita cambiar la lógica de un componente estándar, transfiéralo al nuevo espacio de nombres / local / components / modify / y trabaje con él. Lo mismo se aplica a los módulos, dispositivos y actividades de los procesos comerciales.
No ensucies el archivo init.php . Combina funciones para trabajar con un módulo específico o funcional en una clase, escribe toda esta clase en un archivo separado y en init.php solo incluye estos archivos y escribe controladores de eventos. Conocí archivos init.php de 500Kb cada uno, donde las funciones, la definición de constantes, las clases y la inicialización de los controladores se mezclaron en un desastre. Por supuesto, cuando tuve que entender estos archivos, maldije a mis predecesores.
El siguiente párrafo no se refiere al caso del desarrollo de soluciones ya preparadas para Marketplace, cuando el objetivo es hacer la funcionalidad más personalizable desde la parte pública para el usuario final. Si está trabajando en un proyecto específico, en un ToR específico,
no intente crear una plantilla unificada para el componente en todas las ocasiones . Personalmente, me adhiero a una filosofía: es mejor tener algunas plantillas simples que se usen para diferentes propósitos que una universal, pero en las que el diablo se rompa la pierna más tarde. Por supuesto, en cada caso, debe basarse en lo que es: los términos de referencia, las opciones de implementación y similares, pero no debe olvidarse de la Navaja de afeitar de Occam. Como ejemplo, daré un proyecto de una empresa de arrendamiento, que edité. El proyecto en sí, por supuesto, se implementó horriblemente; para verdadero horror, estaba en las páginas de una sección del catálogo de servicios. Cada una de las cinco secciones tenía su propio diseño, en el que diferían tanto la posición de los bloques en la página como, en principio, la presencia de algunos de ellos. Y para las cinco páginas, se usó una plantilla con un montón de if-else, duplicación de llamadas de componentes, estilos de conexión y scripts, que, además, periódicamente entraban en conflicto entre sí. Como resultado, un archivo enorme en el que entender "sin una pinta" era como la muerte. Aunque, al parecer, ¿qué te impidió hacer 5 plantillas diferentes y no crear dificultades de la nada?
Utiliza la API . No reinvente la rueda donde no se necesita. Utilice la documentación: todo el producto está bastante bien descrito, y también cada función se puede ver en detalle en bxapi.ru.
Evite consultas directas a la base de datos . Este es un caso especial del párrafo anterior: use la API. Las solicitudes apresuradas e inseguras pueden conducir a la corrupción de datos, la pérdida o incluso el compromiso.
No use componentes CNC desde la raíz del sitio . Las consecuencias, por regla general, son bastante tristes, ya que el CNC usa un archivo de manejo de direcciones, un intento de usarlo desde la raíz rompe fácilmente la dirección de otros componentes, así como 404 páginas. No habrá nada de malo si los artículos que tiene están dirigidos a la carpeta / articles /, y los productos son relativos a / catalog /.
Conecte css y js usando la API. Todavía veo scripts y hojas de estilo usando etiquetas html en todas partes. Use el objeto de clase \ Bitrix \ Main \ Page \ Asset y las funciones addJs () y addCss (). Esto permitirá combinar archivos y, posteriormente, almacenarlos en caché con un clic de la casilla de verificación en la configuración del módulo principal
Y finalmente, el error no solo concierne a Bitrix, sino que ya era demasiado doloroso para mí encontrar problemas asociados con él.
Verifique si la matriz está vacía con los resultados de la selección . Como ejemplo, la última vez que conocí este problema fue cuando trabajaba con una tienda en línea. Queja: las páginas a veces se cargan durante 16 segundos. Lo que está conectado no está claro. Por prueba y error, descubrí que las páginas se cargan indecentemente durante mucho tiempo solo cuando la cesta está vacía. Parecía, ¿por qué? Al final resultó que, una ventana emergente apareció en la cesta al pasar el ratón, en la que se mostraban imágenes de los productos puestos en la cesta. Bueno, ¿qué hizo el desarrollador anterior? Tomé el resultado del componente "cesta pequeña" y en el archivo result_modifier.php hice una llamada a GetList () para que los productos seleccionen imágenes con un filtro de la matriz de ID de productos, luego agregué imágenes src de los resultados de selección a la matriz del producto correspondiente. Como resultado, cuando no había productos en la cesta, el filtro se dejaba vacío y el catálogo ENTERO de productos entraba en la selección. Bueno, entonces un ciclo para cada uno y ... tenemos lo que tenemos. Está claro que en la etapa de desarrollo con los productos de prueba 15 esto era imperceptible, y ya surgieron problemas en condiciones de combate. Aunque parece que valió la pena poner el cheque en blanco ($ arResult ['ITEMS']) ...
Aquí es donde termino mi "peor práctica" superior personal con respecto al desarrollo de Bitrix. Si al menos alguien esta información ayudará a evitar errores en el futuro y mejorar su estilo de desarrollo, entonces no fue en vano.