Soluciones practicas
Contenido
- 1 Como editar un item en un website publico
- 2 Slideshow de imagenes interactivas con descripcion de texto
- 3 Construccion de un canal con muchisimos campos
- 4 Creacion de funcion personalizada para campo
- 5 Suma total de un mismo campo en todos los items de un canal
- 6 Funcion personalizada para fechas extendidas en español
- 7 Agrupacion de items repetidos para que parezcan unicos en vista listado
- 8 Como se pasan parametros a una funcion personalizada
- 9 Como almacenar variables URL en AA
- 10 Como capturar el tamaño y el tipo de un archivo
- 11 Nueva funcion para tipo y tamaño de archivos
- 12 Lista de javascripts para combinar con AA
Mark Lopez xanax Richard Lopez xanax Elizabeth Phillips xanax Kenneth Carter xanax Kenneth Edwards xanax Barbara Parker xanax Joseph Williams xanax Paul Gonzalez xanax Deborah Jones xanax Donna Johnson xanax Mark Hill xanax Mary Scott xanax Deborah Mitchell xanax Sharon Young xanax Elizabeth Hall xanax Margaret Scott xanax Ronald Phillips xanax Deborah Miller xanax Karen Adams xanax Mark Nelson xanax Donna Wilson xanax Dorothy Roberts xanax Paul Brown xanax Carol Clark xanax Brian Martin xanax Elizabeth Hall xanax Kevin Evans xanax Donald Martinez xanax Donna White xanax Elizabeth Phillips xanax Susan Scott xanax Michael Lewis xanax Edward Parker xanax William Evans xanax Steven Carter xanax Thomas Rodriguez xanax Edward Lee xanax Kenneth Mitchell xanax Jeff Hall xanax Ruth Anderson xanax Jennifer Young xanax Richard Walker xanax
Como editar un item en un website publico
Traducido de How to edit items in public website?
Hay un script fillform.php3 asociado con las utilidades javascript en include/fillformutils.php3. Este script toma el id de item largo de la variable my_item_id y llama a las funciones javascript para buscar los campos y llenarlos apropiadamente.
Tu debes usarlo de esta manera: Dentro del archivo file anonymous.shtml
Colocar los siguientes includes
<!--#include virtual="/anonym.html"--> <!--#include virtual="/aaa/fillform.php3"--> <!--#include virtual="/bottom.html"-->
Para editar un item con los viejos valores cargados en el formulario puedes llamarlo asi
anonymous.shtml?my_item_id=...
Hay dos parametros adicionales que muchos usuarios no necesitarán: usar "form=formname" cuando tu cambies el nombre del formulario que contiene los campos (usualmente es llamado "f"). Puede usar "notrun = 1" si tu deseas llenar los controles e.g. solamente despues de clickar en algun lugar.
Solamente los items posteados de un website público y no actualizado en el administrador de las AA puede ser editado de esta manera - un flag ITEM_FLAG_ANONYMOUS_EDITABLE se encarga de esto. Este es reseteado cada vez que tu envias un item con itemedit.php3
El mismo script puede ser usado para rellenar condiciones en una pagina de busqueda. Ver en How to refill conditions on searchform?
Slideshow de imagenes interactivas con descripcion de texto
Javascript. En el proyecto donde trabajo necesitaban un Slideshow de imagenes interactivas con descripcion de texto y asi que decidi implementarlo con AA. El asunto es sencillo. Pueden verlo en
http://ertic.inictel.net en la seccion Fotonoticia1. Bajar el script de
2. Crean una vista texto completo (tambien puede ser una vista lista de items de un solo item) y colocan el codigo de la siguiente manera. (En cada item lo configure para que albergara 10 fotos)
---- SECCION ENCABEZADO HTML ---- <code><p><input type="button" id="btnPrev" value="<< Previous" onclick="Prev();"> <input type="button" id="bntPlay" value="Play - Stop" onclick="Play()"> <input type="button" id="btnNext" value=" Next >> " onclick="Next();"></p></code> <code><p align="center"><img id="_Ath_Slide" onload="OnImgLoad()"> </p></code> <p><b>Description:</b> <SPAN id="_Ath_FileName"> </SPAN> <br> <b>Number of Pictures: <SPAN id="_Ath_Img_X"></SPAN> of <SPAN id="_Ath_Img_N"></SPAN> </b></p> <script language="JavaScript1.2"> /* Interactive Image slideshow with text description By Christian Carlessi Salvad? (cocolinks@c.net.gt). Keep this notice intact. Visit http://www.dynamicdrive.com for script */ g_fPlayMode = 0; g_iimg = -1; g_imax = 0; g_ImageTable = new Array(); function ChangeImage(fFwd) { if (fFwd) { if (++g_iimg==g_imax) g_iimg=0; } else { if (g_iimg==0) g_iimg=g_imax; g_iimg--; } Update(); } function getobject(obj){ if (document.getElementById) return document.getElementById(obj) else if (document.all) return document.all[obj] } function Update(){ getobject("_Ath_Slide").src = g_ImageTable[g_iimg][0]; getobject("_Ath_FileName").innerHTML = g_ImageTable[g_iimg][1]; getobject("_Ath_Img_X").innerHTML = g_iimg + 1; getobject("_Ath_Img_N").innerHTML = g_imax; } function Play() { g_fPlayMode = !g_fPlayMode; if (g_fPlayMode) { getobject("btnPrev").disabled = getobject("btnNext").disabled = true; Next(); } else { getobject("btnPrev").disabled = getobject("btnNext").disabled = false; } } function OnImgLoad() { if (g_fPlayMode) window.setTimeout("Tick()", g_dwTimeOutSec*1000); } function Tick() { if (g_fPlayMode) Next(); } function Prev() { ChangeImage(false); } function Next() { ChangeImage(true); } ---- SECCION FILAS IMPARES ---- ////configure below variables///////////////////////////// //configure the below images and description to your own. {switch({_#FOTO1___}).+:g_ImageTable[g_imax++] = new Array ("_#FOTO1___", "_#LEYEND1_");:} {switch({_#FOTO2___}).+:g_ImageTable[g_imax++] = new Array ("_#FOTO2___", "_#LEYEND2_");:} {switch({_#FOTO3___}).+:g_ImageTable[g_imax++] = new Array ("_#FOTO3___", "_#LEYEND3_");:} {switch({_#FOTO4___}).+:g_ImageTable[g_imax++] = new Array ("_#FOTO4___", "_#LEYEND4_");:} {switch({_#FOTO5___}).+:g_ImageTable[g_imax++] = new Array ("_#FOTO5___", "_#LEYEND5_");:} {switch({_#FOTO6___}).+:g_ImageTable[g_imax++] = new Array ("_#FOTO6___", "_#LEYEND6_");:} {switch({_#FOTO7___}).+:g_ImageTable[g_imax++] = new Array ("_#FOTO7___", "_#LEYEND7_");:} {switch({_#FOTO8___}).+:g_ImageTable[g_imax++] = new Array ("_#FOTO8___", "_#LEYEND8_");:} {switch({_#FOTO9___}).+:g_ImageTable[g_imax++] = new Array ("_#FOTO9___", "_#LEYEND9_");:} {switch({_#FOTO10__}).+:g_ImageTable[g_imax++] = new Array ("_#FOTO10__", "_#LEYEND10");:} //extend the above list as desired g_dwTimeOutSec=2 ////End configuration///////////////////////////// ---- SECCION PIE HTML ---- if (document.getElementById||document.all) window.onload=Play </script> <p><font face="Arial" size="-2">Free DHTML scripts provided by<br> <a href="http://dynamicdrive.com">Dynamic Drive</a></font></p> <!----------------------------------------------------------------------------------------------------------->
3. Lo incluyen en su modulo de sitio o en su defecto en la pagina SHTML que usen.
Basicamente, eso es todo
Saludos
Adam
Construccion de un canal con muchisimos campos
Hola a todos Comparto a continuacion mi experiencia siguiendo el FAQ http://actionapps.org/faq/detail.shtml?x=1689 Segun el FAQ hay un script hecho en Perl que sirve para construir campos rapidamente un canal con muchisimo campos. El script esta ubicado en /loquesea/.../apc-aa/misc/txt2fields Lo he probado en el ultimo CVS de las AA (2.8.1+) y funciona. La idea es muy sencilla. Se trata de cargar el archivo que contiene las instrucciones de creacion de los campos directamente a la base de datos usando el script txt2fields. La sentencia de ejecucion del archivo es algo asi: root@server:/var/www/html/apc-aa/misc/txt2fields> ./txt2fields 1f04dc8d7f560c0acd52a8043e7bf8e8 < canal Donde 1f04dc8d7f560c0acd52a8043e7bf8e8 es el ID del Canal y canal es un archivo de texto que en mi caso contenia lo siguiente: ========================================= field Administrador de Red id headline........ required 1 alias1 _#ADMINIST field Problemas de Conectividad id text...........1 input_show_func mch:Probl_conectivid: alias1 _#PROBCONE field Descripcion del problema de conectividad id text...........2 input_show_func txt:8 alias1 _#PROBCON1 field Soluciones para el problema de conectividad id text...........3 input_show_func txt:8 alias1 _#PROBCON2 field Problemas de Computadores o Servidores id text...........4 input_show_func mch: alias1 _#PROBSER1 field Descripcion del problema con Computadores o Servidores id text...........5 input_show_func txt:8 alias1 _#PROBSER2 field Soluciones para el problema con Computadores o Servidores id text...........6 input_show_func txt:8 alias1 _#PROBSER3 field Problemas de Software id text...........9 input_show_func mch: alias1 _#PROBSOF1 field Descripcion del problema con Software id text..........10 input_show_func txt:8 alias1 _#PROBSOF2 field Soluciones para el problema con Software id text..........11 input_show_func txt:8 alias1 _#PROBSOF3 field Problemas de Perifericos id text..........12 input_show_func mch: alias1 _#PROBPER1 field Descripcion del problema con Perifericos id text..........13 input_show_func txt:8 alias1 _#PROBPER2 field Soluciones para el problema con Perifericos id text..........14 input_show_func txt:8 alias1 _#PROBPER3 field Problemas de Equipos de Energia Estabilizada id text..........15 input_show_func mch: alias1 _#PROBENE1 field Descripcion del problema con Equipos de Energia Estabilizada id text..........16 input_show_func txt:8 alias1 _#PROBENE2 field Soluciones para el problema con Equipos de Energia Estabilizada id text..........17 input_show_func txt:8 alias1 _#PROBENE3 field Editado por in_item_tbl edited_by input_show_func nul input_validate text input_help Identification of last editor search_show 0 input_show 0 id edited_by....... search_ft_show 0 search_ft_default 0 input_insert_func uid alias1 _#EDITEDBY alias1_help alias for Last edited By field Fecha de expiracion in_item_tbl expiry_date input_show_func dte:1:10:1 input_validate date input_help Date when the news expires search_show 0 input_show 0 alias1_func f_d:m/d/Y id expiry_date..... search_ft_show 0 search_ft_default 0 required 1 input_insert_func dte alias1 _#EXP_DATE text_stored 0 alias1_help alias for Expiry Date input_default dte:2000 field Comments Count feed 1 in_item_tbl disc_count input_help Internal field - do not change search_show 0 input_show 0 id disc_count...... search_ft_show 0 search_ft_default 0 required 1 input_insert_func nul alias1 _#D_ALLCNT alias1_help alias for number of all discussion comments for this item input_default qte:0 field Approved Comments Count feed 1 in_item_tbl disc_app input_help Internal field - do not change hidden 1 input_show 0 id disc_app........ required 1 input_insert_func nul alias1 _#D_APPCNT alias1_help alias for number of approved discussion comments for this item input_default qte:0 field Displayed Times feed 1 in_item_tbl display_count input_help Internal field - do not change search_show 0 input_show 0 id display_count... search_ft_show 0 search_ft_default 0 required 1 input_insert_func nul alias1 _#DISPL_NO alias1_help alias for number of displaying of this item input_default qte:0 field Resaltar in_item_tbl highlight input_show_func chb input_validate bool input_help Interesting news - shown on homepage search_show 0 input_show 0 id highlight....... search_ft_show 0 search_ft_default 0 input_insert_func boo text_stored 0 field Ultima modificacion in_item_tbl last_edit input_show_func dte:1:10:1 input_validate date input_help Date of last edit search_show 0 input_show 0 alias1_func f_d:m/d/Y id last_edit....... search_ft_show 0 search_ft_default 0 input_insert_func now alias1 _#LASTEDIT text_stored 0 alias1_help alias for Last Edit input_default now: field Publicado por in_item_tbl posted_by input_validate text input_help Identification of author search_show 0 input_show 0 id posted_by....... search_ft_show 0 search_ft_default 0 alias1 _#POSTEDBY alias1_help alias for Author field Fecha de envio in_item_tbl post_date input_show_func nul input_validate date input_help Date of posting this news search_show 0 input_show 0 alias1_func f_d:m/d/Y id post_date....... search_ft_show 0 search_ft_default 0 required 1 input_insert_func now alias1 _#POSTDATE text_stored 0 alias1_help alias for Post Date input_default now: field Fecha de publicacion in_item_tbl publish_date input_show_func dte:1:10:1 input_validate date input_help Date when the news will be published search_show 0 input_show 0 alias1_func f_d:m/d/Y id publish_date.... search_ft_show 0 search_ft_default 0 required 1 input_insert_func dte alias1 _#PUB_DATE text_stored 0 alias1_help alias for Publish Date input_default now: field Slice in_item_tbl slice_id input_help Internal field - do not change search_show 0 input_show 0 alias1_func f_n:slice_id........ id slice_id........ search_ft_show 0 search_ft_default 0 required 1 input_insert_func nul alias1 _#SLICE_ID alias1_help alias for id of slice input_default qte:1 field Status Code in_item_tbl status_code input_show_func sel:AA_Core_Bins.... input_validate number input_help Select in which bin should the news appear search_show 0 input_show 0 id status_code..... search_ft_show 0 search_ft_default 0 required 1 input_insert_func num text_stored 0 input_default qte:1 search_show 0 ============================================ Es muy importante, insertar los campos que van de "Editado por" a "Status Code" en el archivo canal que he mostrado pues sino los items no se muestran en el administrador de items. Dos observaciones. 1. Recuerden habilitar los permisos para leer el archivo canal y que la ruta al binario Perl sea correcta dentro del archivo txt2fields 2. Al ejecutar el archivo todos los campos que estaban antes se borran. Existe tambien un archivo inverso, el fields2txt, el comando para usarlo es al reves root@server:/var/www/html/apc-aa/misc/txt2fields> ./fields2txt 1f04dc8d7f560c0acd52a8043e7bf8e8 > canal2 En este caso el contenido de todos los campos se insertan en el archivo canal2 Esto pueder servir para que chequeen la estructura de los campos de otros canales y se den idea como programarlos despues en archivo de texto Saludos Adam
Creacion de funcion personalizada para campo
Hola a todos
Quisiera comentar como he logrado crear una funcion personalizada para un campo siguiendo los pasos señalados en el siguiente FAQ http://actionapps.org/faq/detail.shtml?x=1773
El problema era configurar un campo DOCUMENTOS con 17 checkbox que muestre el avance en % de los documentos entregados segun se vayan marcando los checkbox. Por ejemplo, si marcaba la mitad de los checkbox, el campo debia mostrar 50% y si marcaba todos debia mostrar 100%.
Como no hay una funcion en las AA estandar que mida la cantidad de checkbox marcados tuve que hacer una funcion personalizada. El codigo de la funcion tuve que ponerlo en /var/www/html/apc-aa/include/usr_aliasfnc.php3
Por si acaso el archivo usr_aliasfnc.php3 se tiene que crear pues no existe por defecto. Para llamar a la funcion use el alias 2 del campo DOCUMENTOS con el tipo de funcion
f_u - definida por el usuario
y en los parametros puse:
usr_contar:
Por ultimo, el codigo de la funcion php que use es el sgte:
<?php function usr_contar ($columns, $col, $param) { $contador=0; $cadena=''; // 17 es el numero total de checkbox for ($i=0;$i<17;$i++){ if($cadena.$columns[$col][$i][value]!='') {$contador++;} } $porcentaje = round((($contador/17)*100),2); return $porcentaje; } ?>
No olviden, que para ver el campo debemos meterlo en la ventana de diseño del administrador de items.
Suma total de un mismo campo en todos los items de un canal
--Adam 19:54 4 feb, 2007 (CET) Hola a tod@s
Les comparto el procedimiento que he empleado para hacer una consulta directa a la base de datos de las AA para sumar un mismo campo en todos los items de un canal. Puede servir para generar reportes estadisticos de una lista de items (con esto ya estamos cerca de armar un modulo de encuestas muy simple usando los mismos items de un canal). Lo he programado en php.
Una nota previa
El Id del canal que vemos en la ventana de administracion no es el mismo que se almacena en la base de datos. Revisando el codigo fuente de las AA me di cuenta que se usa una funcion para "empaquetarla", la funcion pack() .
Por ejemplo, si el Id del canal Noticias es 74656d706c6174657771777771776e6d su Id de almacenamiento en la base de datos es Ú²œ�&à^"F‡Ö¡�²ŒF,... bien feo, no? Entonces para hacer cualquier consulta a la base de datos necesitamos convertir (empaquetar) el Id de la siguiente manera
$codigo=pack('H*','74656d706c6174657771777771776e6d');
al hacer esto la variable $codigo capturara el valor Ú²œ�&à^"F‡Ö¡�²ŒF, con el cual podemos hacer todas las consultas que queramos :)
El codigo que use es el siguiente y pueden copiarlo en un script php dentro del servidor que tiene sus ActionApps cambiando claro los datos que se necesiten como el Id del canal, los datos de acceso a la base de datos y los id de los campos. La consulta a la base de datos si es la misma.
<?php $bd_host = "localhost"; $bd_usuario = "user"; /*****cambiar***/ $bd_password = "password"; /*****cambiar***/ $bd_base = "database"; /*****cambiar***/ $codigo=pack('H*','74656d706c6174657771777771776e6d'); /*****cambiar por el Id de su canal***/ echo $codigo.'<br>'; $con = mysql_connect($bd_host, $bd_usuario, $bd_password) or die ("no me puedo conectar"); mysql_select_db($bd_base) or die ("no me puedo conectarme a esa base de datos"); /*****cambiar text...........7 por el valor del campo que quieren sumar en todos los items***/ $result=mysql_query("select * from content,item,slice where slice.id='$codigo'AND item.slice_id=slice.id AND content.item_id=item.id AND content.field_id='text...........7'") or die("consulta invalida"); echo "<table border=1>"; $suma=0; while ($row=mysql_fetch_array($result)) { echo '<tr><td>'.$row["item_id"].'</td>'; echo '<td>'.$row["field_id"].'</td>'; echo '<td>'.$row["number"].'</td>'; echo '<td>'.$row["text"].'</td>'; echo '<td>'.$row["flag"].'</td></tr>'; $suma = $suma + $row["text"]; } echo "</table>"; echo $suma; ?>
Con una consulta parecida se puede listar todos los items del canal si usamos el id headline........
$result=mysql_query("select * from content,item,slice where slice.id='$codigo'AND item.slice_id=slice.id AND content.item_id=item.id AND content.field_id='headline........'") or die("consulta invalida");
echo "<table border=1>"; while ($row=mysql_fetch_array($result)) { echo '<tr><td>'.$row["item_id"].'</td>'; echo '<td>'.$row["field_id"].'</td>'; echo '<td>'.$row["number"].'</td>'; echo '<td>'.$row["text"].'</td>'; echo '<td>'.$row["flag"].'</td></tr>'; } echo "</table>";
Funcion personalizada para fechas extendidas en español
--Adam 19:49 4 feb, 2007 (CET)
La fecha 29/01/2006 se verá como Lunes 29 de enero del 2006.
Revisar http://www.actionapps.com/faq/detail.shtml?x=1773
La funcion personalizada es
<?php function usr_fecha_espanol($columns, $col, $param="") { $dte = $columns[$col][0][value]; $month = array( 1 => "enero", 2=>"febrero", 3=>"marzo", 4=>"abril", 5=>"mayo", 6=>"junio", 7=>"julio", 8=>"agosto",9=>"setiembre", 10=>"octubre", 11=>"noviembre", 12=>"diciembre"); $weekday = array(1=>"lunes",2=>"martes",3=>"miércoles",4=>"jueves", 5=>"viernes",6=>"sábado",0=>"domingo"); $m = $month[ date("n", $dte)]; $end = ( !$param ? "" : $weekday[ date("w", $dte) ]); return $end." ".date("j", $dte) ." de $m "." de ". date("Y", $dte); } ?>
Este codigo debes pegarlo dentro de un archivo que debes nombrar asi usr_aliasfnc.php3 pues no existe
Este archivo debes colocarlo dentro de la carpeta de instalacion de las ActionApps, por ejemplo, (no se cual sera la ruta en tu servidor)
/var/www/html/apc-aa/include/
siempre debe estar dentro de la carpeta include
Luego debes configurar el campo que usas como fecha poniendo en el tipo de funcion f_u - definida por el usuario
y en parametros debes poner usr_fecha_espanol:
Agrupacion de items repetidos para que parezcan unicos en vista listado
--Adam 02:40 6 feb, 2007 (CET)
Les comparto una solución en javascript para agrupar items repetidos en vista listado de forma tal que parezcan unicos. Muchas veces tenemos listados con varios tipos de clasificacion y quisieramos mostrarlos en una vista sin que se repitan. Pues bien aqui va el codigo (lo use para hacer una seleccion de items en un modulo de sitio junto al parametro als para pasar el parametro "tema" a la condicion 1 de la vista ubicada en ese nodo)
---- En Encabezado HTML ---- <script language="JavaScript"> arr1 = new Array() arr2 = new Array() ---- En Filas impares ---- arr1[_#ITEMINDX] = "<a href=index.shtml?s=A&e=a&r=a&als[tema]=_#NOM_TEMA>_#NOM_TEMA</a>" ---- En Pie HTML ---- for (c in arr1) arr2[arr1[c]] = c for (c in arr2) document.write( c + '<br>'); </script> ----
Eso es todo. El codigo lo tome de http://www.thescripts.com/forum/thread443941.html Un dato adicional, para probarlo use una consola javascript http://personal-de-jall.webcindario.com/software/consola_js.php
Como se pasan parametros a una funcion personalizada
Muchas veces las funciones para cada campo nos quedan cortas y no nos queda mas remedio que desear hacernos una a la medida. Si se sabe algo de php es algo sencillo armarse una, el problema comienza cuando queremos pasar un parametro. Bueno, despues de un par de horas comprendi como funciona el asunto.
Lo que sucede es que las AA incluyen al nombre de la funcion personalizada como parte de la variable parametro ($param). Por ejemplo si uno configura su campo asi;
Alias 1: _#MENU____ Función: f_u - definida por el usuario Parámetros: usr_explode:>:1 Descripcion: Esta funcion sirve para dividir una cadena en varias partes separadas por el signo > y para tomar el segundo valor de las cadenas divididas
Uno podria pensar que el valor de la variable $param es >, pues no, el valor de la variable $param es TODA la cadena incluyendo el nombre de la funcion," usr_explode:>:1 ", subrayo,toda la cadena. Una vez descubierto esto, es facil darse cuenta que la captura de los parametros que quisieramos pasar depende de que usemos funciones nativas en php para extraerlos como la funcion split por ejemplo
Aqui les comparto el codigo comentado de una funcion que programé para separar una cadena en varias parte separadas por el simbolo >, como pueden ver puedo pasar tambien el valor de 1 para indicar que solo quiero trabajar con la segunda cadena separada (la primero es 0). Uno puede pasar todos los parametros que quiera.
<?php function usr_explode ($columns, $col, $param) { $extrae_param = split(":",$param); // extrayendo el parametro $cadena = html_entity_decode($columns[$col][0][value]); // Convertir todas las entidades HTML $trozos = explode($extrae_param[1],$cadena); // partimos la cadena $posicion = $extrae_param[2]; // extraigo el parametro que me indica el nivel del submenu return $trozos[$posicion]; } ?>
Saludos
Adam
Como almacenar variables URL en AA
Uno de los problemas mas importantes cuando uno avanza en las AA, es el almacenamiento de las variables pasadas por URL. Hasta donde he sabido hay dos formas conocidas de definir y almacenar variables.
1.El uso de "als", pero su uso esta restringido a pasar una variable entre un nodo y otro, despues de eso pierde su valor. Ver http://actionapps.org/faq/detail.shtml?x=1738 2. Se pueden tambien almacenar variables en el archivo de control del modulo de sitio pero su valor es definitivo. Ver http://actionapps.org/faq/detail.shtml?x=1680
Sin embargo, muchas veces queremos definir una variable que pueda permanecer mientras vamos navegando en la web o cambiarla a voluntad. Hay una alternativa, usar el archivo de control del modulo de sitio, esto presupone que para que esto funcione tengamos la web diseñada en el modulo de sitio.
Bueno, esto puede hacerse normalmente con un archivo de control. El detalle comienza cuando la variable que quiero usar tendrá mas de 1 caracter. Por ese motivo les comparto un archivo de control de 5 niveles, donde el valor de la variable t puede almacenar cadenas de caracteres de hasta 50 en este caso.
Saludos
Adam
<?php #este script trabaja con 5 niveles # apc: variable de estado # campos: # Caracter Valores Significa # -------- -------------- ------------------------------------ # 1 nivel 1 ($s) # 2 0-9 ó a-A ó A-Z nivel 2 ($e) # 3 0-9 ó a-A ó A-Z nivel 3 ($r)\ # 4 0-9 ó a-A ó A-Z nivel 4 ($a) # 5 0-9 ó a-A ó A-Z nivel 5 ($t) # 6+ numérico Número de Página ($p) # +7+ numérico Identificador de Item (corto) ($x) # Inicializar la variable de estado si no está especificada if( !$apc ) $apc = 'I---x1-'; # Separar la variable de estado $apc en cada una de los estados # (los valores actuales se prefijan por o: $s actual es $os) $patron = "/^([a-zA-Z])(-|[a-zA-Z])(-|[a-zA-Z])(-|[a-zA-Z])(-|[a-zA-Z\s]{1,50})(-|[0-9]+)(-|[0-9-]+)$/s"; //una letra, un guion o una letra, un guion o una letra,un guion o una letra,entre 1 y 20 guiones o letras o espacios en blanco, un guion o cualquier numero,un guion o cualquier numero if( preg_match($patron,$apc,$vars )) { list($anterior, $os,$oe,$or,$oa,$ot,$op,$ox) = $vars; //asigna una variable a cada elemento del arreglo //si es que esta bien la cadena asignada por url a la variable $vars $parse="okas # $apc # $ot";} // bota el resultado else { # si la variable $apc esta en formato equivocado, se inicializa list($anterior, $os,$oe,$or,$oa,$ot,$op,$ox) = array('I','-','-','-','x','1','-'); //asigna valores a cada elemento del arreglo //si es que NO esta bien la cadena asignada por url a la variable $vars $parse="error # $apc # $ot";// bota el resultado } # sh_itm es el identificador largo de un item # lo colocan las action cuando se hace "vista preliminar" # Aqui se obtiene la vista para mostrar ese item, y se asigna el # correspondiente "short item id" a la variable x if ( isset($sh_itm) ) { $id = q_pack_id($sh_itm); $sql = "SELECT v.id AS vid, i.short_id AS sid FROM view v, slice s, item i WHERE i.id='$id' AND i.slice_id=s.id AND v.slice_id=s.id AND v.type='full'"; $db->query($sql); if( $db->next_record() ) { $vid = $db->f('vid'); $x = $db->f('sid'); } } # Aqui se escriben las posibles peticiones URL. if( isset($s) ) {$os=$s; $op='1';$ox='-';} if( isset($e) ) {$oe=$e; $op='1';$ox='-';} if( isset($r) ) {$or=$r; $op='1'; $ox='-';} if( isset($a) ) {$oa=$a; $op='1'; $ox='-';} if( isset($t) ) {$ot=$t; $op='1'; $ox='-';} if( isset($p) ) {$op=$p; $ox='-';} # pagina if( !isset($x) && isset($ox) && $ox!='-') { $x = $ox; } if( isset($x) ) {$op='-'; $ox=$x;} # id de item a mostrar if( isset($scrl) ) { # scroller de pagina, sirve para numerar las paginas $pagevar = "scr_".$scrl."_Go"; $op = $$pagevar; $ox='-'; } # Para mostrar el contenido de un item cuando se especifica via el parametro # "x": encontrar la vista de texto completo para mostrar ese item if ( isset($x) && !isset($sh_itm) ) { $sql = "SELECT v.id AS vid FROM view v, slice s, item i WHERE i.short_id=$x AND i.slice_id=s.id AND v.slice_id=s.id AND v.type='full'"; $db->query($sql); if( $db->next_record() ) { $vid = $db->f('vid'); } } # Creacion de la variable de estado $apc_state = array ('state' => "$os$oe$or$oa$ot$op$ox", // esta variable almacena el valor antes de dar el click y // aparece de forma automatica en el enlace a texto completo 's' => $os, 'e' => $oe, 'r' => $or, 'a' => $oa, 't' => $ot, 'p' => $op, 'x' => $ox, 'estado' => urlencode("$os$oe$or$oa$ot$op$ox"), //para codificar a formato url # Variables de ayuda usadas en el site module -Tu puedes definir tantas variables como desees 'anterior' => $anterior, 'vid' => $vid, # Mensaje es para depurar... en el modulo de sitios se # puede poner {mensaje} para mostrarlo... 'mensaje' => $mensaje, 'parse' => $parse, # informacion de "debug" 'Institucion' => 'Mi institucion', ); ?>
Como capturar el tamaño y el tipo de un archivo
La solucion esta en construirse funciones personalizadas para ese campo. Te comparto dos que me funcionan perfectamente, filesize para el tamaño del archivo y filetype para el tipo de archivo
<?php function usr_filesize ($columns, $col, $param) { define('PATH', "/home/colnodo/public_html"); //ruta completa $archivo =PATH.$columns[$col][0][value]; if ($archivo{strlen($archivo)-4}==".") { // compruebo si tiene una extension tipo windows $tamano = filesize($archivo); if ($tamano <= 1048576) { $tamano_kb = round($tamano /1024,1); return $tamano_kb." Kb"; } else // si pasa 1024 se muestra en MB { $tamano_mb = round($tamano /1048576,1); return $tamano_mb." Mb"; } } else { return ""; } } function usr_filetype ($columns, $col, $param) { $archivo =$columns[$col][0][value]; if ($archivo{strlen($archivo)-4}==".") { $extension =substr($archivo, -3); //extraigo los tres ultimos caracteres return $extension; } else { return "no hay archivo"; } } ?> -----------------------
Estas funciones deben ponerse dentro del archivo usr_aliasfnc.php3 (sino esta hay que crearlo dentro de la carpeta INCLUDE de las AA) Se las puede usar desde la ventana de configuracion del campo o tambien en forma de comandos desde la configuracion de una vista asi:
------------------------------ <ul> <li> <a href='_#PUBLICA1'> Documento Parte 1</a> {alias:file...........1:f_u:usr_filesize} | {alias:file...........1:f_u:usr_filetype}</li> <li> <a href='_#PUBLICA2'> Documento Parte 2</a> {alias:file...........2:f_u:usr_filesize} | {alias:file...........2:f_u:usr_filetype}</li> <li> <a href='_#PUBLICA3'> Documento Parte 3</a> {alias:file...........3:f_u:usr_filesize} | {alias:file...........3:f_u:usr_filetype}</li> <li> <a href='_#PUBLICA4'> Documento Parte 4</a> {alias:file...........4:f_u:usr_filesize} | {alias:file...........4:f_u:usr_filetype}</li> </ul> ---------------------------
Saludos
Adam
Nueva funcion para tipo y tamaño de archivos
He mejorado la nueva funcion INFORMACION DE ARCHIVO y la he programado para que se pueda usar comodamente desde la configuracion del campo en el sistema de administracion de contenidos de las AA y sin tener que rutear nada.
Solo añade lo siguiente (siempre has un backup de los archivos primero)
1. Al archivo item.php3 ubicado -por ejemplo- en /srv/www/htdocs /apc-aa/include/item.php3
// muestra datos del archivo subido function f_z($col, $param="") { switch ( $param ) { case 'type': { $string = $this->getval($col); $string2array = explode(".",$string); $extension = $string2array [count($string2array)-1]; return $extension; } case 'size': { $string = $this->getval($col); $string2array = explode("/",$string); $path_file=IMG_UPLOAD_PATH.$string2array[count($string2array)-2]."/".$string2array[count($string2array)-1]; if (!is_dir($path_file)){ $size = filesize($path_file); $size_kb=round($size /1024,1); $size_mb=round($size /1048576,1); if ($size <= 1048576){$size=$size_kb." Kb";} else {$size=$size_mb." Mb";} return $size; } } } }
2. Al archivo constants_param_wizard.php3 ubicado -por ejemplo- en
/srv/www/htdocs /apc-aa/include/constants_param_wizard.php3
dentro del array $FIELD_FUNCTIONS
"f_z"=>array("name"=>_m("file information"), "desc"=>_m("prints <i>the field</i> as file information, its size or type"), "params"=>array( array("name"=>_m("information"), "desc"=>_m("specifies returned information: <br> - <i>size</i> - returns size of file in Kb o Mb<br> - <i>type</i> - returns type of file)"), "type"=>"STR", "example"=>"size"))),
Eso es todo.Te estoy enviando los archivos por si quieres reemplazarlos directamente en las rutas especificas sin tener que meterte al codigo fuente. Lo hecho en la version 2.10.0 de las AA .
Un ejemplo de configuracion del campo seria usando la funcion f_z (que he creado) con los parametros size y type de esta forma
Alias 1 _#PUBLICA1 Función f_h - múltiples - HTML Parámetros Descripción Alias 2 _#SIZEPUB1 Función f_z - file information Parámetros size Descripción Alias 3 _#TYPEPUB1 Función f_z - file information Parámetros type Descripción
Tambien puedes usarlos por comandos directamente asi en la vista que desees
Tamaño: {alias:file...........1:f_z:size} Tipo: {alias:file...........1:f_z:type}
Saludos
Adam
Lista de javascripts para combinar con AA
1. Muestra en un popup la descripcion del url [1]