Tengo un sitio en el que quiero agregar artículos a través de Firebase y se me ocurrió el siguiente código que muestra el resumen de los artículos, pero son algunos artículos creados por el usuario y quiero modificarlo para mostrar todos los artículos creados por otros usuarios
function allIndex(){ firebase.auth().onAuthStateChanged(function(user) { user ? firebase.database().ref(user.displayName).child("Posts").orderByChild("updatedAt").on("value", function(user) { var t = ""; user.forEach(function(user) { entry = user.val(), t = '<div class="article"><a href="my-posts.html?id=' + user.getKey() + '"><div class="panel-heading">' + excerpt(entry.title, 140) + '</div><div class="panel-body"><small>' + datetimeFormat(entry.updatedAt) + '</small></div></a><small class="' + entry.status + '">' + entry.status + "</small></div>" + t }), $("#entries.post").removeClass("loading").find(".loader").remove(), $("#entries.post .panel_content").append(t) }) : (alert("Please login first"), window.location.href = "sign-in.html") }) }Esta es una lógica asociada que justifica la estructura.
function create() { firebase.auth().onAuthStateChanged(function(n) { n ? (tinymce.init({ }), $("#new_entry").submit(function(e) { e.preventDefault(), (e = {}).title = $(this).find('[name="title"]').val(), e.description = $(this).find('[name="description"]').val(), e.labels = $(this).find('[name="labels"]').val(), e.content = tinymce.get("content").getContent(), e.createdAt = (new Date).getTime(), e.updatedAt = e.createdAt, e.views = 0, e.status = "Pending"; var t = firebase.database().ref(n.displayName), a = t.child("Posts"); return t.child("Points").transaction(function(e) { return (e || 0) + 10 }), a.push(e).then(function(e) { window.location.href = "my-posts.html?id=" + e.getKey() }).catch(function(e) { alert(e), console.error(e) }), !1 })) : (alert("Please login first"), window.location.href = "sign-in.html") }); }Parece que tienes una estructura como esta:
$userName: { Posts: { "post1": { ... }, "post2": { ... }, ... } }En este momento, está cargando las publicaciones de un usuario específico y agregándolas al HTML. Para cargar las publicaciones de todos los usuarios, deberá:
firebase.database().ref().on("value", function(users) { var t = ""; users.forEach(function(user) { user.val().Posts.forEach(function(post) { ... handle post here }) }) }) Notará que ya no hacemos pedidos en updatedAt , ya que eso no es posible en su estructura de datos actual para todos los usuarios. Si desea mostrar todas las publicaciones de todos los usuarios por updatedAt , considere cambiar su estructura de datos a una lista plana de publicaciones, con el nombre de usuario como una propiedad en cada una:
Posts: { "post1": { username: "...", ... }, "post2": { username: "...", ... }, ... }